zoukankan      html  css  js  c++  java
  • Mysql基本操作

    输入mysql -u root -p登陆,会要求你输入密码,第一次登陆没有密码,按回车即可

    show databases; 打印数据库里有多少个数据库

    use mysql; 进入数据库

    show tables; 查看table

    desc user; 查看表的结构
    show columns form user; 查看数据库
    create database lscdb; 创建数据库
    show create database lscdb; 查看数据库字体
    create database lscdb charset utf8; 并设置为utf8
    mysql> create table student(创建一个表
    -> id int auto_increment, 递增
    -> name char(32) not null,
    -> age int not null,
    -> register_date date not null,
    -> primary key (id));


    drop database lscdb; 删除数据库

    Null:是否可以为空 PRI:主键
    +------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Host | char(60) | NO | PRI | 默认值 | |
    | User | char(32) | NO | PRI | | |

    primary key:主键

    插入数据
    insert into student (name,age,register_date)values("lsc",20,"2017-6-13");
    查询
    select * from user; 查看所有的数据
    select * from student limit 2;查看前两条数据
    select * from student limit 2 offset 1;从第一条往后查
    select * from student where id >2; 加条件 and 和
    select * from student where register_date like "2016-02%";模糊查询like 后面用%代替
    select * from userG: 竖着 可读
    select User from user; 查看有多少个用户
    show grants for lsc; 查看对数据库的权限
    修改
    update student set name="lph",age=33 where id=4;
    删除
    delete from student where name="lph";
    排序
    select * from student order by id desc; desc:升序 asc:降序
    统计
    select name,count(*) from student group by name; 统计数量
    select name,sum(age) from student;
    select name,sum(age) from student group by name with rollup; 统计/NULL总和
    select coalesce(name,"总和"),sum(age) from student group by name with rollup; 把NULL 换一个名字

    修改表字段 alter table
    增加字段
    alter table student add sex enum("M","F");
    删除字段
    alter table student drop sex;
    修改字段
    alter table student change age ages char(32) not null default "X";

    添加主键:

    alter table 表名 add primary key;

    删除主键:

    alter table 表名 drop primary key;

    添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段)references 主表(主键字段)

    删除外键:alter table 表名 drop foreign key 外键名称


    创建一个用户
    use mysql;
    grant all on +名字.* to 'lsc'@'%'identfied by 'cong0213';
    gtant 授权 ALL 所有 on .* 下面所有的表 to 'lsc'@'%' lsc:用户 %:所有的机器 idertified by 'cong0213' 密码

    mysql> grant select,insert,update,delete,create,drop
    -> on tutorials.*
    -> to 'lsc'@'%'
    -> identified by '123456';

    select:查
    insert:插入
    update:修改
    delect:删除
    create:创建
    drop: 删除
    insert into user

    grent select,insert,update,delete,create,drop

    外键

    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
    外键的使用条件:
    1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
    2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 
    3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

    外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

    CREATE TABLE dage (
       id int(11) NOT NULL auto_increment,
       name varchar(32) default '',
       PRIMARY KEY  (id)
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
     CREATE TABLE xiaodi (
       id int(11) NOT NULL auto_increment,
       dage_id int(11) default NULL,
      name varchar(32) default '',
      PRIMARY KEY  (id),
      KEY dage_id (dage_id),
      CONSTRAINT xiaodi_ibfk_1 FOREIGN KEY (dage_id) REFERENCES dage (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
    1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

    身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
    2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

    比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

      主键在物理层面上只有两个用途:

            1. 唯一地标识一行。

            2. 作为一个可以被外键有效引用的对象。

      基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:

            1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。

            2. 主键应该是单列的,以便提高连接和筛选操作的效率。

         3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。

      4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

            5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。

  • 相关阅读:
    前后端分离
    分库分表之终极设计方案
    题解-CF1491
    题解-ARC113
    题解-CF578D LCS Again
    团队冲刺第二阶段5
    团队冲刺第二阶段4
    团队冲刺第二阶段3
    团队冲刺第二阶段2
    团队冲刺第二阶段1
  • 原文地址:https://www.cnblogs.com/liushaocong/p/7002457.html
Copyright © 2011-2022 走看看