MySQL 进阶之路(二)数据库操作

数据库操作
创建库Books
CREATE DATABASE IF NOT EXISTS books ;

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

库的刪除
DROP DATABASE books;

库的删除
PROP DATABASE IE EXISTS books ;

表操作
表的修改
#①修改列名
ALTER TABLE book CHANGE COLUMN publi shdate pubDate DATETIME ;

修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate T IME STAMP ;
添加新列
ALTER TABLE author ADD COLUMN anrual DOUBLE ;

删除列
ALTER TABLE author DROP COLUMN a nnua 1 ;
修改表名
ALTER TABLE author RENAME TO book_ author ;

表的删除
DROP TABLE book_ author ;

仅仅复制表的结构
CREATE TABLE copy LIKE author;

复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;

只复制部分数据
CREATE TABLE copy3
SELECT id, au name
FROM author
WHERE nation=中国:

仅仅复制某些字段
CREATE TABLE copy4
SELECT id, au_ name
FROM author
WHERE 0;

将列Last_ name 的长度增加到50
ALTER TABLE emp5 MODIFY COLUMN last name VARCHAR(50) ;

根据表employees创建employees2
CREATE TABLE employees2 LIKE myemployees . employees ;

将表employees2重 命名为emp5
ALTER TABLE employees2 RENAME TO emp5;

如何设置无符号和有符号数
DROP TABLE IE EXISTS tab_ int;
EREATE TABLE tab int (
t1 INT,
t2 INT UNSIGNE D

特点:
①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
②如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
③如果不设置长度,会有默认的长度

小数
分类:
1.浮点型
float (M,D)
double (M, D)

2.定点型
dec(M, D)
decimal (M, D)

特点:
M:整数部位+小数部位
D:小数部位
如果超过范围,则插入临界值
M和D都可以省略
如果是decimal,则M默认为10, D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
③定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

字符型 写法 M的意思 特点 空间的耗费 效率
char char (M) 最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费 高
varchar varchar (M) 最大的字符数,不可以省略 可变长度的字符 比较节省 低
日期型
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间
timestamp 保存日期+时间

约束
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类:
列级约束:I
六大约束语法 上都支持,但外键约束没有效果
表級约束:
除了非空、默认,其他的都支持

六大约束
NOT NULL:非空,用于保证该字段的值不能为空

DEFAULT:默认,用于保证该字段有默认值

PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空

UNIQUE:唯一键:用于保证该字段的值具有唯- -性,可以为空

CHECK:检查约束[mysq1中不支持]

FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须联自于主表的关联列的值

查看stuinfo表中所有的索引,包括主键、外键、唯一
SHOW INDEX FROM stuinfo;

添加列级约束

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

USE students ;
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)#外键
)

添加表级约束

语法:在各个字段的最下面
[constraint约束名]约束类型(字段名)

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

PRIMARY KEY(id),主键
UNIQUE (seat), #唯一键
CHECK(gender=*男”ORgender="女'),#检查
POREIGN KEY (majorid) REFERENCES major (id) #外键
)
SHOW INDEX FROM stuinfo;

通用的写法:
JCREATE TABLE IF NOT EXISTS stuinfo (
id INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL,
sex CHAR(1) ,
age INT DEFAULT 18,
seat INT UNIQUE,
majorid INT,

CONSTRAINT fk_stuinfo major FOREIGN KEY (majorid) REFERENCES major (id)
)

联合主键

DROP TABLE IE EXISTS stuinfo;
CREATE TABLE stuinfo (
id INT,
stuname VARCHAR (20) ,
gender CHAR(1) ,
seat INT ,
age INT ,
majorid INT,
seat2 INT ,
PRIMARY KEY (id, stuname) ,主键
UNIQUE (seat) #唯一键
CHECK (gender =”男” OR gender='女'), #检查
FOREIGN KEY (majorid) REFERENCES major (id)外键
)

外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key (一般是主键戏唯一 )
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表

约束操作
修改表时添加约束

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

#1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN s tuname VARCHAR (20)
NOT NULL

#2.添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18 ;

#3.添加主键
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY ;
#②表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY (id) ;

#4.添加唯一
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE ;
#②表级约束
ALTER TABLE stuinfo ADD UNIQUE (seat) ;

#5.添加外键
ALTER TABLE stuinfo ADD
CONSTRAINT fk. stuinfo _majo2
FOREIGN KEY (majorid) REFERENCES major (id) ;

修改表时删除约束

#1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR (20) NULL;
#2.删除默认约束
ALTER TABLE stuinfo MODIEY COLUMN age INT ;
#3.删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;

#4.删除唯一
ALTER TABLE stuinfo DROP INDEX seat;

#5.删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY majorid;

标识列
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值

#一、创建表时设置标识列
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT ,
name VARCHAR (20)
) ;

标识列可以通过
SET auto_increment_increment=3;
设置步长也可以通过手动插入值,设置起始值

二、修改表时设置标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO INCREMENT;

#三、修改表时删除标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY ;

猜你喜欢

转载自blog.51cto.com/14509987/2434172
今日推荐