mysql学习笔记(3)_DDL(Data Define Language)

旧巷老猫 提交于 2020-02-26 14:33:26

##DDL(Data Define Language)数据定义语言

数据定义语言:库和表的管理
            1.库的管理
            创建,修改,删除
            2.表的管理
            创建,修改,删除
            
            创建:create
            修改:alter
            删除:drop



###########
###库的管理
###########
#1.创建名为books的数据库
create database books;
create database if not exists books;

#2.修改库的字符集
alter database books char set gbk;

#.3.库的删除
drop database books;
drop database if  exists books;


###########
###表的管理
###########

#一.表的创建
/*
    create table 表名(
    列名 列名类型 约束,
    ...
    )

*/
CREATE TABLE book (
    id INT,
    bname VARCHAR(20),
    price DOUBLE,
    authorId INT,
    publish DATETIME
);
desc book;

#二.表的修改
/*
    1.修改表名
    2.修改列的类型和约束
    3.添加新列
    4.删除列
    5.修改列名

*/
#1.修改列名
alter table book change column publish pubDate datetime;

#2.修改列的类型或约束
alter table book modify pubDate timestamp;

#3.添加新列
alter table book add column bmark varchar(20);

#4.删除列
alter table book drop column bmark ;

#5.修改表名
alter table book rename to newbook;

#三.表的删除
drop table random;
show tables;

#四、表的复制
#1.仅仅复制表的结构
CREATE TABLE copy LIKE t_student;

#2.复制表的结构和内容
CREATE TABLE copy2 SELECT * FROM
    t_student;

#3.根据自己的需要复制部分数据
CREATE TABLE copy3 SELECT id, name, score FROM
    t_student
WHERE
    score > 90;

#4.仅仅复制部分表的结构(不包含数据)
CREATE TABLE copy4 SELECT id, name, score FROM
    t_student
WHERE
    1 = 2;
 


  
##################
####常见的数据类型
##################

/*
    数值型:
        整型(tinyint,smallint,mediumint,int,integer,bigint)
            .(1)整形默认是无符号,即负数和正数都可以,若想改为无符号,则在后面追加unsigned
             (2)若插入的值超过最大值,先显示out of range异常,并且插入的是最大值
             (3)如果不设置长度,则有默认的长度
        小数
            定点数DEC(M,D)
            浮点数
                float(M,D)
                double(M,D)
            特点:
            (1)M,D的含义
            M代表:整数部位+小数部位
            D代表:小数部位
            如果超过,则插入临界值
    字符型:
        较短的文本:char,varchar(char是固定长度,varchar是可变字符)
        较长的文本:text,blob(较长的二进制数据)
        
    日期型:
        date 1001-01-01
        datetime 1001-01-01 00:00:00
        datestamp与实际时区相关
        time 00:00:00
*/
#枚举类,即只能插入相关的字母
CREATE TABLE tab_char (
    cr ENUM('a', 'b', 'c')
);

#集合类
CREATE TABLE tab_set (
    cr SET('a', 'b', 'c','d')
);


##################
####常见约束
##################
/*
    含义:一种限制,用于限制表中的数据,保证数据的准确性和一致性
    语法:
        
      create table 表名(
        列名 列名类型 列名约束
      )
      
      
      分类: 六大约束
        1. NOT NULL :非空,用于保证该字段不能为空
        2. DEFAULT: 默认 用于保证该字段有默认值
        3. PRIMARY KEY:主键约束 用于保证该字段的值具有唯一性,并且非空
        4. UNIQUE:唯一 , 用于保证该字段的值具有唯一性,可以为空
        5. 【check】:检查约束,mysql不支持
        6. FOREIGN KEY:外键约束 ,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
        
        按添加的时机: 
            修改表时
            创建表时
        
        按约束的添加分类: 
            列级约束 :
                六大约束都可以,外键约束没有效果
            表级约束: 
                除了非空,默认都支持
*/
#1.添加列级约束 
CREATE TABLE studio (
    id INT PRIMARY KEY,
    stuname VARCHAR(20) NOT NULL,
    sex CHAR CHECK (sex = '男' OR sex = '女'),
    seat INT UNIQUE,
    age INT DEFAULT 18
);


desc studio;

#2.添加表级约束

 constraint 约束名 约束类型(字段名) 

CREATE TABLE majord (
    id INT primary key,
    name VARCHAR(10)
);


CREATE TABLE study (
    id INT,
    stuname VARCHAR(20),
    gender CHAR,
    seat INT,
    age INT,
    majorid INT,
    CONSTRAINT d PRIMARY KEY (id),
    CONSTRAINT s UNIQUE (seat),
    FOREIGN KEY (majorid)
        REFERENCES majord (id)#这里majord里的i
)  ENGINE=INNODB DEFAULT CHARSET=UTF8;

desc study;

###主键和唯一的区别 
#        保证唯一性  是否允许为空  一个表中可以有多个  是否允许组合
#主键     √                 ×                 至多有1个        √,但不推荐
#唯一      √                 √                可以有多个        √,但不推荐


#外键的特点 
#①要求在从表中建立外键关系
#②从表的外键关联列必须主表关联列的类型一致,名称无要求
#③主表的关联列必须时key或唯一 
#④插入数据时,应该先插入主表中的数据
#⑤删除数据时,先删除从表中的数据,再删除主表中的数据


###################
###修改表时添加约束
###################
CREATE TABLE stu (
    id INT,
    stuname VARCHAR(20),
    gender CHAR,
    seat INT,
    age INT,
    majorid INT
) ;
#添加非空约束
alter table stu modify column stuname varchar(30) not null;
#添加默认约束
alter table stu modify column age int default 18;
#添加主键约束
alter table stu modify column id int primary key;
alter table stu add primary key(id);
#添加唯一约束
alter table stu modify column majorid int unique;



###################
###修改表时删除约束
###################
#1.删除非空约束
alter table stu modify column stuname varchar(30) ;
#2.删除默认约束
alter table stu modify column age int;
#3.删除主键约束
alter table stu drop primary key;
#4.删除唯一约束
alter table stu drop index majorid;
desc stu;

#5.删除外键
alter table study drop foreign key majorid;


#标识列
/*
    也叫自增长列
    含义:可以不用手动地插入值,系统提供默认地序列值
    特点:自增长列默认从1开始,也可指定从多少开始

*/
#一、创建表时设置标识列
create table mark(
 id int auto_increment,
 name varchar(20) ,
 primary key(id)
)auto_increment = 1001;

insert into mark(name) values('jack');

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!