MySQL主键 外键和其他约束,load data 的配置文件以及其他记录

主键约束

以建立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工具进行操作的,不知道其他版本的是什么情况)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值