Java打怪之路-----MySQL之库与表

(一)数据库

1.1库的创建

语法:
create database [if not exists]库名;

#案例:创建库Books

CREATE DATABASE IF NOT EXISTS books ;

1.2库的修改

RENAME DATABASE books TO 新库名;

#更改库的字符集

ALTER DATABASE books CHARACTER SET gbk;

1.3库的删除

DROP DATABASE IF EXISTS books;

(二)表

2.1创建

语法:
create table 表名(
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,

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

案例:创建表Book


CREATE TABLE book(
	id INT,#编号
	bName VARCHAR(20),#图书名
	price DOUBLE,#价格
	authorId  INT,#作者编号
	publishDate DATETIME#出版日期

2.2修改

语法:
alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;

①修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;

②修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

③添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;

④删除列
ALTER TABLE book_author DROP COLUMN annual;

⑤修改表名
ALTER TABLE author RENAME TO book_author;
DESC book;

2.3删除

DROP TABLE IF EXISTS book_author;

2.4复制

先往author中加入数据

INSERT INTO author VALUES
(1,‘村上春树’,‘日本’),
(2,‘莫言’,‘中国’),
(3,‘冯唐’,‘中国’),
(4,‘金庸’,‘中国’);

  1. 仅仅复制表的结构
CREATE TABLE copy LIKE author;
  1. 复制表的结构+数据
CREATE TABLE copy2 
SELECT * FROM author;
  1. 仅仅复制某些字段
CREATE TABLE copy4 
SELECT id,au_name
FROM author
WHERE 0;

(三)约束

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

分类:六大约束

  1. NOT NULL:非空,用于保证该字段的值不能为空
    比如姓名、学号等
  2. DEFAULT:默认,用于保证该字段有默认值
    比如性别
  3. PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
    比如学号、员工编号等
  4. UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
    比如座位号
  5. CHECK:检查约束【mysql中不支持】
    比如年龄、性别
  6. FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
    在从表添加外键约束,用于引用主表中某列的值
    比如学生表的专业编号,员工表的部门编号,员工表的工种编号

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

约束的添加分类:
1、列级约束:
六大约束语法上都支持,但外键约束没有效果

2、表级约束:
除了非空、默认,其他的都支持

3.1添加列时的约束

直接在字段名和类型后面追加 约束类型即可。

只支持:默认、非空、主键、唯一

USE students;
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
	id INT PRIMARY KEY,#主键
	stuName VARCHAR(20) NOT NULL UNIQUE,#非空
	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)
);

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

3.2添加表级约束

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

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT,
	stuname VARCHAR(20),
	gender CHAR(1),
	seat INT,
	age INT,
	majorid INT,
	
	CONSTRAINT pk PRIMARY KEY(id),#主键
	CONSTRAINT uq UNIQUE(seat),#唯一键
	CONSTRAINT ck CHECK(gender ='男' OR gender  = '女'),#检查
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
	
);
SHOW INDEX FROM stuinfo;

3.3通用写法

一般除了外键,其他都添加列级约束

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

);

3.4主键与唯一键对比

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

组合的意思是可以由多个列组合成一个主键。
比如在学生表中,将id与studentname组合成一个主键。
这样在插入数据时,两个列的内容都相同才判断为主键不重复。

#组合主键
CONSTRAINT pk PRIMARY KEY(id,stdudentName)

3.5外键约束

学生表引用专业表,学生表为从表,专业表为主表
特点:

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

3.6标识列

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

特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表可以有几个标识列?至多一个!
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment=3;设置步长
可以通过 手动插入值,设置起始值

CREATE TABLE tab_identity(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME FLOAT UNIQUE,
	seat INT 
);

猜你喜欢

转载自blog.csdn.net/weixin_44020747/article/details/118518528