数据库基础

1:存储引擎:InnoDB MyIsam memory blackhole

InnoDB 支持事务,行级锁,外键

  事务:原子性操作

    就是讲一组sql语句当成一个原子性操作

    要么全部成功,要么全部不成功,不成功事务回滚.

  行级锁:同一张表中的不同行可以被同时修改

MyIsam : 查询快,相对插入数据和修改数据相对慢

  表级锁,同一张表不能同时被修改

memory:处理数据速度快,如每个用户的登录状态可以使用 数据都存储在内存中, 数据量小,并对服务器的内存有要求 断电消失

blackhole 黑洞 放进去的数据都不存 创建表时默认的存储引擎是Innodb:

指定创建表的存储引擎: create table staff_info (id int,age int) engine = MyIsam;

2.sql语句: 创建表:create table staff_info (id int,name varchar(20),age int,sex enum('female','male'),phone char(11),job varchar(20));

查看表结构:desc staff_info;

  show create table staff_info \G;

插入数据:insert into staff_info (id,name,age,sex,phone,job) values (1,'liming',12,男,1234567912,it);

插入单行数据:insert into staff_info vales (1,'liming',12,男,1234567912,it);

插入多行数据:insert into staff_info values

    (1,'liming',12,男,1234567913,it),

    (2,'liming',12,男,1234567914,it),

    (3,'liming',12,男,1234567915,it),

    (4,'liming',12,男,1234567916,it);

查看表中所有数据: select * from staff_info;

查看指定列的数据: select age from staff_info;

 

3.常用数值:int,float,decimal(无误差,用于汇率,利息等高精度数值)

4,时间 :

  date 描述年月日

  datetime 描述年月日时分秒

  time 时分秒

    create table t1 (d date,t time,y year,dt datetime,ts timestamp);

    insert into t1 (now(),now(),now(),now(),now());

+------------+----------+------+---------------------+---------------------+
# | d                  | t              | y       |  dt                                 | t s                          |
# +------------+----------+------+---------------------+---------------------+
# | NULL | NULL | NULL | NULL | 2018-09-29 11:27:29 |
# | 2018-09-29 | 11:29:07 | 2018 | 2018-09-29 11:29:07 | 2018-09-29 11:29:07 |
# +------------+----------+------+---------------------+---------------------+

5:基本数据类型:

  char() 0-255字节,定长字符串

      定长,浪费磁盘 ,存取速度非常快

      应用:这一列数据的长度变化小,如id,手机号,身份证号,序号

         频繁存取,对效率要求高

          短数据时使用

  varchar()0 -65535 字节,变长字符串

      变长,节省磁盘空间 ,存取速度相对char慢

      应用:这一列数据的长度变化大, name,地址

      对效率要求相对小

      相对长数据时使用

   create table user (id int,name varchar(30),age char(3));

   insert into user values(1,'li',12);

      插入数据,name实际上占用了两个字节,age占用了三个字节.

      char类型在查询时会默认去掉所有补全的空格

  插入带有 空格的数据,查询的时候看到varchar字段是带有空格显示的,char字段显示的时候是会去掉所有的空格

  插入的数据如果超过了约束的范围,会截断数据

6,枚举与集合:enum 与 set

  枚举,在值集合中选取单个值,(如选什么银行卡,选什么支付方式时,性别) : sex  enum('male','female') [  单选框]

  集合 :在值集合里选取任意的值,多选hobby set('a','b','c')  去重,多选框

  create table t2 (name varchar(20),sex enum('male','female'),hobby set('a','b','c'));

  insert into t2 values ('liming','female','a,b,b,d'); b会去重,d 不会写入表

  如果插入的数据不在枚举或集合中,那么数据不会写入表中

7.表约束:

  not null 非空 default

     如果不输入就使用默认的

  unique 唯一  auto_increment (id自增,必须唯一,以及是数字类型)

      如果是空格,只能有一个空格

      非空+唯一就不能有空格

  联合唯一 如(ip,port)

    就是给一个以上订单字段设置唯一约束

  primary key 主键  (not null + unique) 唯一 + 非空  加速查询,每张表只能有一个主键

     当我们以非空并且唯一的约束来创建一个表时,如果没有指定主键,那么第一个非空唯一的字段将会被设置成主键   

  foreign key 外键 (unique,外表中唯一的)

  create table t1 (id int primary key,name varchar(20) not null,phone char(11) not null unique ),

  insert into t1 (id,name) values (1,'liming')

外键:

  create table department (id int primary key auto_increment,dep_name varchar(20) not null);

  create table staff (sid int primary key auto_increment,sname varchar(20) not nll,dep_id int,

foreign key(dep_id) references department(id));

show create table staff;查看外键,外键 MUL

 

连级删除:

  如果一个表中的字段作为外键对另一个表提供服务,那么默认不能直接删除外表中正在使用的数据

  on delete cascade

  on update cascade

    course : cid,cname,cprice

    student :sid,sname,age,course_id

        create table course (cid int primary key auto_increment,cname varchar(20) not null,cprice int not null);

    create table student (sid int primary key auto_increment,sname varchar(20) not null,age char(3) not       null,course_id int ,foreign key(course_id) references course(cid),on delete cascade on update cascade);

    insert into course (cname,cprice) values ('python',19800),('linux',15800);

    insert into student (sname,age,course_id) values ('liming',12,1),('lining',18,2);

    delete from course where cid = 1

 

 

联合唯一:

  create table t1 (id int primary key,ip char(15) not null,port int not null,unique(ip,port));

设置默认值:default

  create table user (id int primary key auto_increment,name varchar(20) not null,sex enum('male','female') not null default 'male');

 

8,表结构修改:

  alter table user rename user1; 修改表名

  alter table user add name varchar(20) not null  after id; 在id后面添加列

  alter table user add name varchar(20) not null  first; 

  alter table user drop name;删除列

  alter table user modify name char(50) not null after age; 修改已存在的列名的约束,位置

  alter table user change name new_name varchar(20) not null after id;修改表名

  

  

  

 

posted @ 2018-09-29 16:22  俏如來  阅读(117)  评论(0编辑  收藏  举报