主键约束
以建立stu表,设置id为主键
直接在名称后边加上key 或者使用 PRIMARY KEY () 进行设置
CREATE TABLE `stu` (
`id` int unsigned NOT NULL AUTO_INCREMENT # key,
`name` varchar(10) DEFAULT NULL,
`sex` tinyint DEFAULT '1' COMMENT '1男2女',
#或者在此设置主键为id
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3
外键约束
建立idcord表,设置id为主键,同时id为表stu表的外键
CREATE TABLE `idcard` (
`id` int unsigned NOT NULL,
`CardNu` varchar(18) DEFAULT NULL,
PRIMARY KEY (`id`),
#设置外键名称为fk_001
CONSTRAINT `fk_001` FOREIGN KEY (`id`) REFERENCES `stu` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
其他约束
not null 和 default 不能同时使用,一但指定默认值,not null将不起作用,与两者的位置无关
当定义不能为空的时候,必须输入值
当not null 和default ' '一起使用时,not null将不起作用
create table so(
id int unsigned not null auto_increment KEY,
#这里设置的name不能为空
name VARCHAR(10) not NULL,
score DECIMAL(4,1) DEFAULT 0
)
insert into so(name, score) VALUES ('李四',63)
select * from so
desc so
#修改以后的name可以为空,并且正常输出
alter table so
#这里是not null在前
modify name varchar(10) not null DEFAULT ''
insert into so(score) values(25)
select * from so
输出结果如下:

当default 在前的时候
alter table so
modify name varchar(10) DEFAULT '' not null
insert into so(score) VALUES ROW (200.3)
输出结果如下:

其他杂记
更改表的结构,一般都是用alter table
如果不是更改表结构,一般不适用alter table
关于数据库的各种操作可以查看MySQL 8.0的官方手册:https://dev.mysql.com/doc/refman/8.0/en/
#三种更改表名的方式
alter table students rename student
alter table student rename to students
alter table students rename as student
单独使用rename 的时候,只能使用to
当使用alter table的时候,rename后可以加to 或者as 或者省略不写
插入数据
建立os表,设置几个属性
#insert 的初使用
create table os (
#可以设置默认值为uuid,但是在插入数据的时候,不能使用uuid
id int key not null auto_increment ,
name varchar (10),
password varchar (50),
state tinyint default 1 comment '1:很好 2:一般 3:很差',
creatime TIMESTAMP default CURRENT_TIMESTAMP,
datatime TIMESTAMP default CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP
)
数据插入的格式
#第一种方式,直接使用insert into 进行插入数据
#第二种方式,使用set方法进行插入
#第三种方式,直接将别的表中相同名称的数据插入进来,使用select方法
三种方法的应用:
#第一种方式,直接使用insert into 进行插入数据
#对于特定的字段数据的插入
insert os(name ,password) VALUES ('的方式',SHA('5695'))
#全部属性的插入
insert into os VALUES (null,'张三',SHA('123456'),'1',null,null)
#对特定字符串的批量插入
insert into os(name ,password) values ('王五',md5('123456')),('李六',sha('123456')),('赵四',SHA1('123456'))
#第二种方式,使用set方法进行插入
#使用set进行数据的插入,不能批量插入
INSERT into os set name ='公元热沟通',password = SHA('5695')
#第三种,直接将别的表中相同名称的数据插入进来,使用select方法
insert into os(username ,password) select username ,password from member where username like '李%'
#当两个表的字段属性正好一样时可以直接使用被引用的表
insert into os(username ,password) table demo
#这种方法就是加了一个Row,不如第一种方法方方便
insert os(name ,password) VALUES Row('的方式',SHA('5695'))
insert和replace的区别:
当指定唯一的主键时,使用insert进行数据的插入,如果主键的值相同,会报错,而replace会进行数据的修改
当进行replace操作时,相当于进行新数据的写入,如果是数据的修改,则创建时间应该和修改时间不一致,但是进行replace操作完成以后,创建时间是和最后更新时间是一样的

load data
MySQL load data 语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应表的一条记录)。
load data 将大量数据(文本文档格式)插入到数据库中
执行此语句将os中的数据导入到d盘下的123文件中
select * from os into outFile 'D://123.txt'
出现的问题一:
> 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
出现的问题二:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
把数据输入和把数据导入数据库中出现报错的时候,在配置文件没有my.ini中添加如下代码
原因是因为My.ini文件没有配置好,解决方法一:
进行全局变量的配置
在mysql中添加
#启动load data,允许执行本地代码
local-infile=1
在mysqld中添加
#允许启动load data local infile
local-infile=1
#允许执行 select * form xx into outfile 'file'
secure-file-priv=''
使用terminated 进行分隔符的判断
#将本地文件导入数据库中并指定分隔符
load data local infile 'D://456.txt' into table bg fields TERMINATED by '|'
在修改完配置文件后要重新启动服务器
明天在写剩下的
解决方法二:
在load data 语句的上边加入临时的变量,前提是没有设置全局变量
set @@global.local_infile=1 #变量值设置为1
load data local infile 'D://456.txt' into table bg fields TERMINATED by '|'
把磁盘中的文件(文本文档格式)导入数据库,默认一行数据
#将本地文件导入数据库中
#方法一:
load data local infile 'D://123.txt' into table os1
select * from os1
create table bg (
id int,
password varchar(10)
)
# 方法二 将本地文件导入数据库中并指定分隔符
load data local infile 'D://456.txt' into table bg fields TERMINATED by '|'
数据库的导出与导入
导出:

导入:win+R,输出cmd进入控制台
进入数据库,进入想要导入的数据库里边,输入help有如下的命令:

发现有source 的命令代码
source +数据库的源文件地址

出现以上数据,说明数据源导入成功
方法二:右键单击有”导出向导“ ,也可以将数据库的内容以自己想要的格式进行是输出(我用的Mysql8以及Navicat Premium 15工具进行操作的,不知道其他版本的是什么情况)