MySQL 数据库 增删查改、克隆、外键 等操纵
目次1、SQL 字段数据类型
2、查看数据库信息语句
3、SQL 语句
[*]创建、删除 数据库 数据表
[*]向表中添加、删除 记录、查询记录
[*]修改表名,添加、修改、删除 字段,添加唯一约束
[*]查看、删除、添加 表中的索引
[*]扩展功能,字段值自增等
4、数据表高级操作
[*]克隆表,将数据表的数据记录生成到新的表中
[*]删除记录后主键记录重头开始自增
[*]创建暂时表
5、创建外键约束,保证数据的完整性和一致性
6、MySQL 六种约束
<hr>数据库中有数据表,数据表中有一条一条的记录。
可以用Navicat 等长途连接工具链接数据库,不过数据库需要开启授权。
SQL 字段数据类型
[*]int:整型,默认长度是11
[*]float:单精度浮点,4字节32位
[*]double:双精度浮点,8字节64位
[*]char:不可变长的字符类型,读取速率快,耗空间,长度不敷会补空格。
[*]varchar:可变长的字符类型,但读取数据比 char 低,容易产生内存碎片
[*]text :文本
[*]image:图片
[*]decimal(6,2) :界说6个有效长度数字,小数点反面有两位
char 最多支持 255 个字符,char 假如存入数据的现实长度比指定长度要小,会补空格至指定长度;假如存入的数据的现实长度大于指定长度,低版本的 Mysql 会被截取前 255个 字符,高版本会报错。
注 varchar 类型:在4.0版本以下,varchar(20),指的是20字节;5.0版本以上,varchar(20),指的是20字符。
查看数据库信息语句
起首登岸MySQL,也可以用SQL工具如 Navicat 长途连接,前提是要在Linux Mysql 中用 grant 举行授权,允许长途登录。#授予root用户可以在所有终端长途登录,使用的暗码是123456grant all privileges on *.* to 'root'@'%' identified by '123456';#对所有数据库和所有表有操作权限 with grant optiongrant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;Navicat 连接参数
https://p9.toutiaoimg.com/large/pgc-image/8a375360c204435296e86729e3d64a6b
为了练习在Linux 中操作,下面的都是在 Linux 命令框中直接敲的。
Linux 中登录Mysqlmysql -u root -p暗码1.查看当前服务器中的数据库SHOW DATABASES;2.查看数据库中包含的表USE 数据库名 #注意:数据库名区分巨细写SHOW TABLES;3.查看表的结构(设计、字段)DESCRIBE [数据库名.]表名或DESC 表名4. 查看创建表的命令SHOW CREATE TABLE 表名5.查询效果行转列查看 \GSELECT * FROM USER_INFO\G;6. 查看当前所在数据库select database()https://p3.toutiaoimg.com/large/pgc-image/ac046f81fddb49389398f46c8bd304c2
https://p26.toutiaoimg.com/large/pgc-image/84ae9678627940428fb709deac7ab1b2
SQL 语句
SQL语句用于 维护管理数据库,包括 数据查询、访问控制、数据更新、对象管理、备份等功能。
https://p26.toutiaoimg.com/large/pgc-image/a33575f96336453fa9f486bf78c71b9a
创建、删除 数据库 数据表
创建新的数据库
CREATE DATABASE 数据库名;例如:CREATE DATABASE SCHOOL;在数据库中新建表
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。例:USE SCHOOL;CREATE TABLE STUDENT (ID int(10) NOT NULL,NAME varchar(20),AGE int(3),SEX char(2),PRIMARY KEY (ID));https://p3.toutiaoimg.com/large/pgc-image/7620b89236494ebda1ff9f5bfab05bdb
https://p26.toutiaoimg.com/large/pgc-image/88718ddd9b7f4227a40e773108bbea4d
删除表
DROP TABLE [数据库名.]表名; #如不消USE进入库中,则需加上数据库名删除数据库
DROP DATABASE 数据库名; #会连库中的表一起删除删除操作要小心,删除前记得被备份https://p26.toutiaoimg.com/large/pgc-image/a6692dd120f347a2bae2521f53beefdd
向表中添加、删除 记录、查询记录
#先创建 STARBUCKS 数据库,再创建 USER_INFO 表,添加一些字段CREATE DATABASE STARBUCKS;USE STARBUCKS;DROP TABLE IF EXISTS `USER_INFO`;CREATE TABLE `USER_INFO`(`ID` int(32) NOT NULL,`NAME` varchar(20) DEFAULT NULL,`TYPE` varchar(32) DEFAULT NULL,`ADD_TIME` varchar(20) DEFAULT NULL,`IS_USED` char(5) DEFAULT NULL,PRIMARY KEY (`ID`) )https://p6.toutiaoimg.com/large/pgc-image/111cdc5595324bebbdababf4b13cbb12
向表中添加记录
INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);例:#一条一条全字段添加INSERT INTO USER_INFO(ID,NAME,TYPE,ADD_TIME,IS_USED) VALUES (1001, '咖啡机', '呆板齐全', '2021-06-22', 'D0001');INSERT INTO USER_INFO VALUES (1002, '奶茶机', '设备', '2021-06-23', 'D0001');#或一条命令添加多条INSERT INTO USER_INFO (ID,NAME,TYPE,ADD_TIME,IS_USED) VALUES (1003, '牛奶', '食品', '2021-06-24', 'D0002'),(1004, '包装机', '设备', '2021-06-20', 'D0001'),(1005, '糖块', '食品', '2021-06-25', 'D0001'),(1006, '吸管', '设备', '2021-06-20', 'D0001'),(1007, '奶油', '食品', '2021-06-25', 'D0002');https://p6.toutiaoimg.com/large/pgc-image/36a4dc3364f94cb9adcae86832a14ead
SELECT 查询语句
SELECT 字段名1,字段名2[,...] FROM 表名 ;#从0行开始共几行SELECT * FROM 表名 limit 行数 #根据行数范围取记录数SELECT * FROM 表名 limit 开始行数(不包括),从开始行数开始的共几行https://p26.toutiaoimg.com/large/pgc-image/575134d9f19746968c78ff32fbd46280
https://p26.toutiaoimg.com/large/pgc-image/48863de3695c4c3fb1b2374f16f76b58
UPDATE 更新
注意WHERE 加更新的条件,否则会更新所有
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] ;如 UPDATE USER_INFO SET TYPE='仪器' WHERE ID=1001;https://p3.toutiaoimg.com/large/pgc-image/f24391c3697a4202a71cc69c1906e1dc
DELETE 删除记录
注意WHERE 加删除记录的条件,否则会删除所有
DELETE FROM 表名 ;例:delete from class2 where id=4;https://p26.toutiaoimg.com/large/pgc-image/363541ab2c6147c982967c8401b32eef
修改表名,添加、修改、删除 字段,添加唯一约束
修改表名
ALTER TABLE 旧表名 RENAME 新表名;例:ALTER TABLE USER_INFO RENAME USER_MESG;SHOW TABLES;1234https://p3.toutiaoimg.com/large/pgc-image/ab49fc50ba704bdf8c9bd5a4b03df069
表中添加字段
ALTER TABLE 表名 ADD 字段名 varchar(50) default '默认值';#default 表示此字段设置默认值;可与 NOT NULL 共同使用,默认值立即生效例:ALTER TABLE USER_MESG ADD STATUS VARCHAR(20) DEFAULT '在用';https://p3.toutiaoimg.com/large/pgc-image/f6a15dc83f5e43f79c27df35e8f12fe1
删除表中字段
ALTER TABLE 表名 DROP 字段名;修改字段(列)名,添加唯一键约束
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 ;例:ALTER TABLE USER_MESG CHANGE NAME DEV_NAME VARCHAR(30) UNIQUE KEY;#验证唯一键约束,添加重名的约束字段INSERT INTO USER_MESG VALUES (1008,'牛奶','饮料','2021-06-28','D0001','已过期');#触发唯一键约束,新增失败UNIQUE KEY 唯一键:可以用有空值,不能出现重复值,也不能为 NULL,https://p26.toutiaoimg.com/large/pgc-image/c4359c69ccd04bb18fdcbd99ff601e65
https://p9.toutiaoimg.com/large/pgc-image/90961110adf548b090900c999e455cac
查看、删除、添加 表中的索引
#查看表有哪些索引 SHOW INDEXES FROM 表名;https://p26.toutiaoimg.com/large/pgc-image/a399c55df04d41009767b765ce42d713
单独新增 去除唯一键约束
#给字段 DEV_NAM 增加唯一键约束ALTER TABLE USER_MESG ADD UNIQUE INDEX (DEV_NAME);#给字段 DEV_NAM 去除唯一键约束#查看索引表中,字段 DEV_NAME 对应的 索引名 Key_name,根据索引名删除索引ALTER TABLE USER_MESG DROP INDEX 索引名;https://p9.toutiaoimg.com/large/pgc-image/4062e43905ee4b0fa18924605bf79b97
https://p26.toutiaoimg.com/large/pgc-image/1f6f61cf81b5406ba285a38841e0b450
https://p3.toutiaoimg.com/large/pgc-image/8ad732c40bef464184661c4eb6686fc8
扩展功能,字段值自增等
use school;CREATE TABLE IF NOT EXISTS AREA_INFO ( -> AREA_ID int(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, #指定主键的另一种方式-> AREA_NAME VARCHAR(20) NOT NULL UNIQUE KEY,->IS_USED CHAR(5) NOT NULL);#---------------命令解释--------------------------------#if not exists:表示检测要创建的表是否已存在,假如不存在就继续创建#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;#自增长字段必须是主键;字段类型必须是 int 类型,如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键#not null:表示此字段不允许为NULLhttps://p3.toutiaoimg.com/large/pgc-image/dd6c64f522b14f41bc9901ff8d3fcdc5
https://p3.toutiaoimg.com/large/pgc-image/0674fffc9eba4165b40ac7a64653efa2
数据表高级操作
克隆表,将数据表的数据记录生成到新的表中
方法一:使用 like
#先克隆表结构#在插入所有数据CREATE TABLE AREA_CLONE1 LIKE AREA_INFO; #通过 LIKE 方法,复制 AREA_INFO 表结构生成 AREA_CLONE1 表INSERT INTO AREA_CLONE1 SELECT * FROM AREA_INFO;https://p3.toutiaoimg.com/large/pgc-image/c62925d3e6ee40019b9545a757374ab1
假如两张表结构一样,可将一张表的查询效果集返回给 另一张表INSERT INTO 表1 SELECT * FROM 表2https://p26.toutiaoimg.com/large/pgc-image/56c2a12a93f1479eac696444cca4d1d2
方法二:直接克隆
#直接将源表的查询效果给创建的新表CREATE TABLE 克隆表名(SELECT * FROM 源表名);SHOW CREATE TABLE 克隆表名\G; #获取数据表的表结构、索引等信息注意:直接克隆无法复制原表的 主键、自动增长、约束、索引等配置。 用 LIKE 可以。
https://p3.toutiaoimg.com/large/pgc-image/6cf1b17d2d324f64b0b6448ba14c4d4e
删除记录后主键记录重头开始自增
DELETE FROM 表名;#DELETE清空表后,返回的效果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;假如表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 反面继续自增写入记录。truncate table 表名;#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速率上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。#相称于直接格式化表创建暂时表
暂时表是在当前连接中生效的表。
[*]暂时表创建成功之后,使用 SHOW TABLES 命令是看不到创建的暂时表的;
[*]暂时表会在连接退出后被烧毁。 假如在退出连接之前,也可以可实行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除暂时表。
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);例:CREATE TEMPORARY TABLE TEM_TABLE (ID int(4) PRIMARY KEY, REMARK VARCHAR(20));INSERT INTO TEM_TABLE VALUES(1001,'暂时表');SELECT * from TEM_TABLE;https://p26.toutiaoimg.com/large/pgc-image/5c87ba6cde5a43818810f1dac6dd2744
实行 quit 退出连接后,再次登录,就操作不了暂时表了https://p3.toutiaoimg.com/large/pgc-image/f77625135edc4b5587e9c0a3cc2042bc
创建外键约束,保证数据的完整性和一致性
外键的界说:假如同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。主键表和外键表的理解:(1)以公共关键字作主键的表为主键表(父表、主表)(2)以公共关键字作外键的表为外键表(从表、外表)注意:1. 与外键关联的主表的字段必须设置为主键。2. 要求从表不能是暂时表,主从表的字段具备类似的数据类型、字符长度和约束。#创建主表HOBBY CREATE TABLE HOBBY (HOBID int(4),HOBNAME VARCHAR(50));#创建从表HOBBY_DETAIL CREATE TABLE HOBBY_DETAIL (ID int(4) PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),AGE int(3),HOBID int(4));#为主表HOBBY 添加一个主键约束。主键名建议以“PK_”开头。ALTER TABLE HOBBY ADD CONSTRAINT PK_HOBID PRIMARY KEY (HOBID);#为从表HOBBY_DETAIL 表添加外键,并将 HOBBY_DETAIL 表的 hobid 字段和 HOBBY 表的 hobid 字段建立外键关联。#外键名建议以“FK_”开头。ALTER TABLE HOBBY_DETAIL ADD CONSTRAINT FK_HOB FOREIGN KEY (HOBID) REFERENCES HOBBY (HOBID);DESC HOBBY_DETAIL ;#插入新的数据记录时,要先主表再从表INSERT INTO HOBBY VALUES(1,'Football');INSERT INTO HOBBY_DETAIL VALUES(1,'Messi',32,1);https://p26.toutiaoimg.com/large/pgc-image/64ecad619a9b45768e7a184eb24a84da
https://p3.toutiaoimg.com/large/pgc-image/cae315db6bce40fcaa389d5045abe1a5
#删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表。DROP TABLES HOBBY_DETAIL ;DROP TABLES HOBBY ;#查看和删除外键约束SHOW CREATE TABLE HOBBY_DETAIL ;ALTER TABLES HOBBY_DETAIL DROP foreign key FK_HOB ;#FK_HOB 是之前添加的外键名ALTER TABLES HOBBY_DETAIL DROP key FK_HOB ;DESC HOBBY_DETAIL ;https://p6.toutiaoimg.com/large/pgc-image/7cc00729bdc44ffc84f7b26e45b32671
https://p3.toutiaoimg.com/large/pgc-image/3f556820b4fb4118822eb5dd3ea5cd88
https://p3.toutiaoimg.com/large/pgc-image/2cd32478d0154fe7b611ad55d7a762a8
去除外键后就可以删除表了
DROP TABLES HOBBY_DETAIL ;
DROP TABLES HOBBY ;
MySQL 六种约束
[*]主键约束(primary key)
[*]外键约束(foreign key)
[*]非空约束(not null)
[*]唯一性约束(unique )
[*]默认值约束(default)
[*]自增约束(auto_increment)
key 列值的含义:
[*]假如键是 PRI,则列是主键或多列主键中的列之一。
[*]假如键是 UNI,则该列是唯一索引的第一列。(唯一索引允很多个空值,但可以通过检查NULL字段来判断该列是否允许空。)
[*]假如键为 MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。
值得学习 转发了 转发了 转发了 转发了 转发了 转发了 mark
页:
[1]