zoukankan      html  css  js  c++  java
  • Mysql基础

    MySQL
    ===========================
    1.什么是数据库
    2.什么是MySQL
    3.为什么要用数据库
    4.什么是实体 entity
    客观存在的,可以被描述的事或物(一件商品、一次交易记录...)
    如何描述实体:------>特征(属性)
    一个实体,就是一条记录,也叫一行(row) record
    特征(属性)---->列(字段)
    表--->一条一条的记录组成
    数据库--->由多张表组成,表之间有关系

    5.数据库系统
    Database System 、 DBS

    数据库Database 、db
    数据库管理系统Database Manager System 、DBMS
    6.数据库管理员
    Database Administrator 、DBA

    7.主流数据库
    Oracle MySQL MSSQLServer DB2 Access SQLite

    8.数据冗余
    根据需求决定

    9.数据的完整性
    如何保证数据的完整性

    10.主键
    最小、最稳定、不重复、不改变
    如果实体中选不出合适的,加一列,用自增的整数作为主键

    11.唯一约束
    ***主键与唯一约束的区别:主键不允许为null ,唯一约束可以为null

    12.外键
    用来和其它表发生关联

    =====================================================
    1.服务运行中
    我的电脑->右键->管理->服务->mysql
    cmd命令行:
    net stop mysql
    net start mysql
    2.进入MySQL
    运行cmd
    程序->附件->命令提示符
    显示C:UsersUser> 这是Windows命令得示符,表示当前是在Windows中,并未进入到MySQL

    -h主机名 -u用户名 -p密码
    mysql -hlocalhost -uroot -p123456 #注意-p和密码之间没有空格
    mysql -uroot -p 常用这种

    显示mysql> 说明进入到MySQL中了,就可以在这里执行MySQL相关指令

    3.MySQL常用指令
    指令结束: ; g
    命令输错了: c 清除缓冲区
    帮助: help; h
    退出: exit quit ctrl+c


    提示符:
    -> 等分号或g 或c
    '> 等单引号
    "> 等输入双引号

    上下箭头能调出历史记录

    如何复制到记事本中

    =================================================================
    1.查看当前有哪些数据库?
    show databases;

    2.如何创建一个数据库?
    创建一个名称叫s01的数据库
    create database s01;
    3.删除数据库
    drop database s01;
    4.进入一个数据库
    use 数据库名;
    use s01;
    5.如果查看当前在哪个数据库中?
    select database();
    6.查看当前数据库有哪些表
    show tables;


    数据类型
    4种:数值、字符串 日期时间 null

    *tinyint 1个字节 -128到127 无符号的 0-255
    smallint 2个字节 无符号的0-65535
    mediumint 3个字节
    *int 4个字节 正负21亿多 无符号的:0到40多亿
    bigint 8个字节 负的2的63次方到正的2的63次方减1 无符号的:……

    float(m,d) m总位数 d有多少位是小数
    float(3,2) -9.99到9.99
    m和d都不填,表示最大范围

    float(p)

    double(m,d)

    decimal(m,d) 以字符串表示浮点数 缩写 dec

    char(0-255)
    是定长的,不足长度,会在后面加空格,如果太长,会删除后面一部份
    varchar(0-65535)
    变长的,占位空间取决于真正存放的数据
    text 长文本 不需要指定长度 也没有默认值
    blob 二进制
    enum('男','女') 只能选一个
    set('a','b','c') 'ab' 'abc' 'bc' 'ca' 'a'

    datetime 日期时间
    datetime yyyy-mm-dd hh:ii:ss
    date yyyy-mm-dd
    time hh:ii:ss
    year yyyy



    7.创建表
    create table stu(
    id int auto_increment primary key,
    name varchar(50) unique not null,
    sex tinyint not null default 0,
    email varchar(255) not null default ''
    )engine=MyISAM default charset=utf8;


    8.删除表
    drop table stu;


    9.如果查看建表语句(已经创建好的表,想知道是怎么创建的)
    show create table 表名G


    10.如何查看表结构
    desc 表名;
    11.concat

    下拉菜单
    sql="select * from category order by concat(path,id)"
    连接的作用
    ----------------------------------------
    运算符

    + - * / %
    = > < >= <= <> !=

    select 2+3;

    比较是否相等,是用一个等号,不是两个等号
    null不等于null

    is null
    is not null
    *in
    not in
    *between and
    *like
    regexp
    not regexp


    && and || or ! not
    not的优先级很高


    & | >> <<

    select 3 in (3,4,5);
    select 3 between 2 and 5;
    select (3>=2 and 3<=5); 与上一行一样的
    select 'admininistrator' like 'admin%';
    select * from t1 where name regexp 'a.*$';

    =============================
    安装MysQL
    mysql-5.9-win32.msi
    mysql-5.9-win32.zip 推荐

    mysqld -install mysql
    mysqld -remove mysql

    my.ini
    [msyqld]
    character-set-server = utf8
    [client]
    default-character-set = utf8


    命令行的中文编码
    *简体中文版Windows系统中
    set names gbk;
    =============================

    约束
    unsigned 无符号 没有负数了 只能放在数值类型的后面
    zerofill 零填充 例如int(6) zerofill
    mysql> select * from t2;
    +--------+
    | num |
    +--------+
    | 000025 |
    +--------+
    1 row in set (0.00 sec)
    not null 非空
    auto_increment 自增,某一个自增id被删除,将不会再使用
    primary key 主键
    unique 唯一
    default 默认值


    ==========================
    11.添加列
    alter table 表名 add 列名 类型 约束; (add 后面的部份,与建表语句一样)

    12.删除列
    alter table 表名 drop 列名;

    13.修改列信息
    alter table 表名 change 原列名 新列名 类型 约束 (后面部份与建表语句一样)
    14.设整列顺序
    alter table 表名 change 原列名 新列名 类型 约束 after 列名;
    alter table stu change address address varchar(255) not null after name;
    after first
    15.如何改表名称
    alter table 表名 rename as 新表名;

    16.如何改表引擎
    常用引擎:MyISAM InnoDB(支持事务)
    alter table 表名 engine 新的引擎;

    ----------------------------------
    以上15条表结构相关指令,全背,默写
    ----------------------------------

    如果存在stu表,则删除
    DROP TABLE IF EXISTS stu;

    注释:
    -- 注释内容
    /*多行*/
    #脚本风格注释

    没有stu表,则创建
    CREATE TABLE IF NOT EXISTS stu(
    id INT AUTO_INCREMENT PRIMARY KEY, -- 编号
    name VARCHAR(50) NOT NULL UNIQUE, -- 姓名
    sex INT NOT NULL DEFAULT 0, -- 性别
    age INT NOT NULL DEFAULT 0, -- 年龄
    email VARCHAR(255) NOT NULL DEFAULT '', -- 邮箱
    grade_id INT NOT NULL -- 班级编号
    )ENGINE=MyISAM DEFAULT CHARSET=UTF8;

    /*测试数据*/
    INSERT INTO stu (name,sex,age,email,grade_id)
    VALUES
    ('张三',1,18,'aaa@bb.com',1),
    ('李四',0,20,'bbb@bb.com',1),
    ('王五',1,16,'ccc@bb.com',1),
    ('赵六',1,22,'ddd@bb.com',1),
    ('田七',0,20,'ddd@bb.com',1),
    ('王八',1,21,'ddd@bb.com',1);




    -----------------------------
    插入数据
    insert into 表名 (字段1,字段2,...) values ('值1','值2',...);
    如何一次插入多条记录?
    insert into 表名 (字段1,字段2,...) values ('值1','值2',...),('值3','值4',...);

    不写列名时,按顺序对应,数量样一样多
    insert into 表名 values ('值1','值2');


    查询数据
    select 列名 from 表名 where 条件 排序 限制返回数量

    查所有信息
    select * from stu; *号表示所有的列(字段)
    只想显示id和name
    select id,name from stu;
    条件
    select * from stu where id>3;
    select * from stu where age=20;
    select * from stu where age between 18 and 21;
    select * from stu where age>=18 and age<=21;
    select * from stu where name like '王%';
    select * from stu where age=18 or age=21;
    排序
    select * from stu order by age;
    默认是 asc 升序
    倒序排
    select * from stu order by age desc;
    所有男生从大到小排
    select * from stu where sex=1 order by age desc;
    限制返回数量
    select * from stu limit 3;
    通常要结合排序使用:
    select * from stu order by id limit 3; -- 前3条数据
    等同于 limit 0,3
    跳过2条,返回3条:
    select * from stu order by id limit 2,3;

    编号大于1,大于16岁,男生排前面,只返回3条数据,只显示姓名、性别、年龄
    select name,sex,age from stu where id>1 and age>16 order by sex desc limit 0,3;

    删除
    delete from 表名 where 条件;
    注意不要成为王八蛋

    更新
    update 表名 set 列名=值 where 条件;
    也要写上条件
    creat

    ========================================
    数据的备份 全部在操作系统命令行中
    C:UsersUser>mysqldump -uroot -p s01>c:stu_201304016.sql

    导入
    C:UsersUser>mysqladmin -uroot -p create s01 创建数据库
    C:UsersUser>mysql -uroot -p s01<c:stu_201304016.sql

    -------------------------------------------
    如何复制数据到另一个表
    insert into stu2 select * from stu; 新表stu2必须存在

    create table stu3 select * from stu; 新表不存在时,创建(没有约束)


    create table stu3 select * from stu where 1<>1; 只在表结构

    create table stu3 select id,name from stu ; 只要id和name列

    create table stu6 select id,name,'20130407' time from stu; 添加一个time 列

    更新数据

    update stu set age=age+1; 没有php的$i++;
    在更新用记积分、余额时,通常这么使用


    快速删除
    truncate table stu;
    自增id 会重置

    在MySQL数据库中,

    字段或列的注释是用属性comment来添加。

    创建新表的脚本中,
    可在字段定义脚本中添加comment属性来添加注释。

    示例代码如下:
    create table test(
    id int not null default 0 comment '用户id'
    )

    如果是已经建好的表,
    也可以用修改字段的命令,然后加上comment属性定义,就可以添加上注释了。

    示例代码如下:
    alter table test
    change column id id int not null default 0 comment '测试表id' 

    给表的字段或列添加注释已经知道了,
    那么如何来查看已有表的所有字段的注释呢?
    可以用命令:show full columns from table 来查看,
    示例如下:
    show full columns from test;


    ----------------------------------------------------------------

    PHP操作MySQL

    1.PHP操作数据常用的3种方式
    mysql函数 纯过程化
    mysqli
    PDO 纯面向对象

    2.mysql函数

    mysql_connect(主机,用户名,密码)
    mysql_select_db(数据库名称 [,连接 ])
    mysql_set_charset('utf8' [,连接 ])
    mysql_query(SQL语句 [,连接 ])
    mysql_affected_rows(连接) 受影响行数
    mysql_error(连接)
    mysql_errno(连接)
    mysql_close(连接)

    两种排错方式 action_bak.php


    mysql_insert_id(连接)


    //在增删改的情况下,函数需要传入资源的情况下,都是传入连接($link)

  • 相关阅读:
    深入Activity生命周期(一)
    android APK 中英文对比(转)
    android中获得系统语言
    mime Contenttype(http head)(转)
    activity设置全屏
    Activity常用知识
    关于这次数学建模
    排列组合
    hdu 1003 笔记
    杂想
  • 原文地址:https://www.cnblogs.com/wicub/p/4322935.html
Copyright © 2011-2022 走看看