(七)MySQL基础——库和表的管理、常见的数据类型、约束

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Steriles_/article/details/82999395

DDL(数据定义语言):包括库和表的管理

一、库的管理

1、库的创建

语法:CREATE DATABASE IF NOT EXISTS 库名;

2、库的修改

语法:RENAME DATABASE 旧库名 TO 新库名;(版本更新后不使用了,会影响库内数据)

一般去外部文件中去修改库名,先停止服务,修改库名之后再更新开启服务。

更改库的字符集:ALTER  DATABASE  库名  CHARACTER  SET  gbk;

3、库的删除

语法:DROP  DATABASE  IF  EXISTS  库名;

二、表的管理

1、表的创建

语法:CREATE TABLE    IF  NOT  EXISTS   表名(  列名 列的类型【(长度) 约束】, 

                                                      列名 列的类型【(长度) 约束】,

                                                      . . .

                                                      列名 列的类型【(长度) 约束】   )

CREATE TABLE  IF NOT EXISTS book(
    id INT,
    bName  VARCHAR(20),
    bPrice DOUBLE,
    authorId INT,
    publishDate DATETIME
);

CREATE TABLE author(
    id INT,
    au_name VARCHAR(20),
    nation VARCHAR(10)
)

VARCHAR(20)中20表示最大字符串长度,一个字母占一个字符,一个汉字也占一个字符。

2、表的修改:alter

(1)可以修改列名;

语法:

ALTER   TABLE   表名   CHANGE  COLUMN   旧列名   新列名   新列名类型  

ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;

(2)可以修改列的类型或约束;

语法:

ALTER   TABLE   表名   MODIFY   COLUMN  列名   列要更改为的类型

ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

(3)可以添加新列;

语法:

ALTER    TABLE   表名   ADD   COLUMN  要添加的列名  要添加列的类型

ALTER TABLE author ADD COLUMN annual DOUBLE;

(4)可以删除列;

语法:

ALTER    TABLE   表名   DROP   COLUMN   IF  EXISTS   要删除的列名

ALTER TABLE author DROP COLUMN IF EXISTS annual;

(5)可以修改表名。

语法:

ALTER   TABLE   要修改的表名   RENAME    TO   新表名   

ALTER TABLE author RENAME TO author;

3、表的删除:drop

语法:

DROP   TABLE   IF   EXISTS   表名

DROP TABLE IF EXISTS bool_author;

4、表的复制:

(1)仅仅复制表的结构,语法如下:

CREATE   TABLE   新表名   LIKE   要复制的表名

CREATE TABLE copy LIKE author;

(2)复制表的结构和数据,语法为:

CREATE   TABLE  新表名   SELECT   *   FROM  要复制的表名

CREATE TABLE copy2 SELECT * FROM author;

(3)在(2)的基础上,但仅仅复制部分数据和相应的字段,语法为:

CREATE   TABLE   copy3   SELECT   要复制的数据列名  FROM  要复制的表名   WHERE  筛选条件

CREATE TABLE copy3 SELECT id,au_name FROM author WHERE nation='中国';

(4)仅仅复制某些字段,语法为:

CREATE    TABLE    新表名   SELECT   要复制的列名  FROM   要复制的表名   WHERE   0

CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;

三、常见的数据类型

1、数值型:整型、小数(定点数、浮点数)

2、字符型:较短的文本(char、varchar)、较长的文本(text、blob(较长的二进制数据))

3、日期型

 

(1)整型

分类:tinyint——1字节、smallint——2字节、mediumint——3字节、int/integer——4字节、bigint——8字节

特点:

<1>如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加你unsigned关键字。

<2>如果插入的数值超出整型的范围,首先会报异常out  of range,并且插入临界值。

<3>如果不设置长度,会有默认的长度。长度代表了显示的最大宽度,如果不够会有0在左边填充,但必须搭配ZEROFILL使用。

(2)小数

分类:浮点型——ffloat(M,D)——4字节  double(M,D)——8字节;定点型——decimal(M,D)——M+2字节,可以简写成dec(M,D)

对于精确度要求较高的小数,建议使用定点型

特点:

<1>M和D:M代表整数部位+小数部位的总长度;D代表小数部位。如果超过范围,则插入临界值。M和D都可以省略。如果是decimal,则M默认为10,D默认为0;如果是float或者double,则会根据插入的数值的精度来决定精度。

<2>定点型的精确度较高,如果要求插入数值的精度较高,如:货币运算等,就优先考虑使用

(3)字符型

分类:

较短的文本——char和varchar、binary和varbinary(较短的二进制)、enum用于保存枚举、set用于保存集合;

较长的文本——text和blob(较大的二进制)、

特点:

<1>char(M)、varchar(M)——M的意思是指最大的字符数。

<2>char代表固定长度的字符,比较耗费空间,但性能较高一点;varchar代表可变长度字符,比较节省空间,但性能较低一些。

<3>char中M可以省略,默认为1,而varchar中M不可以省略。

(4)日期型

分类:date(只保存日期)\datetime(保存日期+时间)\timestamp(保存日期+时间)\time(只保存时间)\year(只保存年)

特点:

datetime:8字节、范围1000—9999、不受时区影响

timestamp:4字节、范围1970—2038、受时区影响

四、常见约束

约束的含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

六大分类:

1、NOT NULL (非空约束,用于保证该字段的值不能为空,比如姓名、学号等)

2、DEFAULT (默认约束,用于保证该字段有默认值,比如性别等)

3、PRIMARY KEY (主键约束,用于保证该字段的值具有唯一性并且非空,比如学号、员工编号等)

4、UNIQUE (唯一约束,用于保证该字段的值具有唯一性但可以为空,比如座位号等)

5、CHECK (检查约束,MySQL中不支持该约束,比如检查年龄、性别是否符合要求)

6、FOREIGN KEY (外键约束,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值)

注意,外键约束是在从表中添加,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,工种编号等。

添加约束的时机:1、创建表时;2、修改表时

具体格式如下图所示:

约束的添加分类:

1、列级约束(跟在字段后面):六大约束语法上都支持,但外键约束没有效果

语法:直接在字段名和类型后面追加约束类型即可,只支持:默认、非空、主键、唯一

CREATE TABLE stuinfo(
    id INT PRIMARY KEY, #主键
    stuName VARCHAR(20) NOT NULL, #非空
    gender CHAR(1) CHECK (gender='男'OR gender='女'), #检查
    seat INT UNIQUE, #唯一
    age INT DEFAULT 18, #默认约束
    majorId INT REFERENCES major(id) #外键

)

CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
)

2、表级约束(脱离字段):除了非空、默认约束,其他都支持

语法:在各个字段的最下面,【CONSTRAINT  约束名】 约束类型(字段名)

CREATE TABLE stuinfo(
    id INT,
    stuname VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT,
    majorid INT,

    CONSTRAINT pk PRIMARY KEY(id), #主键
    CONSTRAINT ck CHECK (gender='男'OR gender='女'), #检查
    CONSTRAINT uq UNIQUE (seat), #唯一
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键

)

3、通用的写法

  CREATE TABLE IF NOT EXISTS stuinfo(
    id INT PRIMARY KEY,
    stuname VARCHAR(20) NOT NULL,
    sex CHAR(1),
    seat INT UNIQUE,
    age INT DEFAULT 18,
    majorid INT,

    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键

)

 

 

 

 

猜你喜欢

转载自blog.csdn.net/Steriles_/article/details/82999395