MySQL数据表操作及外键约束
Posted 阳光小王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据表操作及外键约束相关的知识,希望对你有一定的参考价值。
mysql数据表操作及外键约束
MySQL常用数据类型
int | 整 型 |
---|---|
float | 单精度浮点,4字节32位 |
double | 双精度浮点,8字节64位 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字 ,小数点后面有2位 |
查看数据库结构
查看当前服务器中的数据库
SHOW DATABASES; #不区分大小写,以;结束
- 不区分大小写
查看数据库中包含的表
- 要先使用USE切换到数据库中
USE 数据库名; #先切换到数据库中
SHOW TABLES;
查看表的结构(字段)
USE 数据库名;
DESCRIBE 数据库名.表名;
或者
DESC 表名; #可以直接查看数据库里的表
- 我们一般用desc + 表名查看表
SQL语句
SQL语句用于维护管理数据库,包括数据查询,数据更新,访问控制,对象管理等功能。
SQL语言分类
- DDL:数据定义语言,用于创建数据库对象,例如:库,表,索引等。
- DML:数据操纵语言,用于对表中的数据进行管理
- DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
- DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
创建新的数据库
CREATE DATABASE 数据库名;
创建新的表
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型,...,PRIMARY KEY (主键名));
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键
create table ky10 (id int(3) not null, name char(20), sex char(2), age int(3), passwd varchar(50), primary key (id));
删除指定数据表及数据库
- 删除数据表(谨慎使用)
DROP TABLE 数据库名.表名; #如果不用use进入库中,则需要加上库名
- 删除库(谨慎使用)
DROP DATABASE 数据库名;
管理表中的数据记录
向数据表中插入新的数据记录
insert into 表名(字段1,字段2...) values (字段1的值,字段2的值...);
或者
insert into 表名 values(字段1对应的值,字段2对应的值,...);
select * from 表名 ; #查询表的数据记录
查询数据记录
select 字段名1,字段名2,... from 表名;
- 使用where进行过滤
select * from 表名 where + 条件判断;
例:select name,age from ky10 where id=1;
#从表ky10中过滤出当id=1时的name及age元素
select name from ky10\\G
#后面可以不加分号,加分号也可以显示但是会报错
#以坚列方式显示名字
select * from 表名 limit 2; #只显示头两行
select * from 表名 limit 2,3; #显示第2行后的头3行(显示第3到第5行记录内容)
修改、删除数据表中的指定数据记录
- 修改指定记录
update 表名 set 字段名1=字段值1,.. where + 条件表达式;
#一般update配合where条件表达式使用,要不然会修改整个表格数据
- 删除指定记录
delete from 表名 where + 条件表达式;
修改表名和表结构
修改表名
alter table 旧表名 rename 新表名;
修改表结构
- 增加字段
alter table 表名 add 字段名+(字符型/整数型..) Default ->默认值为地址不详;
修改字段名,添加唯一键
alter table 表名 change 旧列名 新列名 数据类型 unique key;
#unique key 给新列名设置唯一键
- 设置唯一键
- char与vachar区别
char为固定字符长度,varchar为可变字符长度
删除字段
alter table 表名 drop 字段名;
补充扩展
use kgc;
create table if not exists info (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
---------------------------------------------------------
#切换到库kgc
#if not exists:检测要创建的表是否已存在,如果不存在则继续创建
#int(4) zerofill:若数值不满4位,则前面用0填充,如:0001
#auto_increment:表示此片段为自增长字段,每条记录自动增1,默认从1开始递增,自增长字段数据不可以重复;自增长字段必须是主键;
#如添加的记录数据没有指定此字段且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复,一张表中只能有一个主键,但是一张表中可以有多个唯一键.
#not null:表示此字段不允许为NULL
- PS:如果执行第二条错误,它的id也会递增加1;
数据表高级操作
克隆表,将数据表的记录生成到新的表中
- 方法一
create table test01 like class;
insert into test01 select * from class;
#通过like方法,复制class表结构生成test01表
- 方法二
create table test02 (select * from class);
show create table test02\\G #以坚列形式显示
select * from test02; #查看表test02
清空表,删除表内所有数据
- 方法一
delete from test01;
#delete清空表后,返回的结果内有删除的记录条目;
#delete工作时是一行一行的删除记录数据的;
#使用delete删除时,如果表中有自增长字段,删除后再插入新的记录,会从原来最大ID开始递增加
- 方法二
truncate table test01;
#truncate清空表后,没有返回被删除的条目
#truncate工作时是将表结构按原样重新建立,在速度上truncate比delete清空表要快
#truncate清空表内数据后,ID会从1开始重新记录
创建临时表
create temporary table (字段1 数据类型,字段2 数据类型..,primary key (主键名));
mysql> create temporary table test03 (
-> id int(4) zerofill primary key auto_increment,
-> name varchar(10) not null,
-> cardid int(18) not null unique key,
-> hobby varchar(50));
#临时表创建完成后,使用show table是看不到临时表的,临时表会在连接退出后自动销毁
#临时表在退出前一样可以增删改查等操作
创建外键约束
create table test04 (hobid int(4),hobname varchar(50));
#创建主表test04
create table test05 (id int(4) primary key auto_increment,name varchar(50),age int(4),hobid int(4));
#创建从表test05
#主表test04与从表test05都有一个相同关键字段(hobid),数据类型相同,字符长度相同
alter table test04 add constraint PK_hobid primary key(hobid);
#修改test04增加约束,主键名,主键约束字段--hobid
alter table test05 add constraint FK_hobid foreign key(hobid) references test04(hobid);
#修改test05外键约束名为FK_hobid外键约束字段
- 插入记录先从主表插入,然后才能在从表插入记录
- 删除要先删除从表记录,才能删除主表记录
以上是关于MySQL数据表操作及外键约束的主要内容,如果未能解决你的问题,请参考以下文章