0
点赞
收藏
分享

微信扫一扫

MySQL——创建数据库和数据表

在觉 2022-02-06 阅读 79

创建数据库和数据表

(1)创建数据库相关代码

create database test;     #创建数据库
show create database test;   #查看创建好的test数据库
show databases;    #查看所有数据库
use test;    #使用数据库test
drop database test;    #删除数据库test

(2)创建数据表

use test;
create table emp(    #创建员工信息表
depid char(3),
depname varchar(20),
peoplename int
);
show tables;   #查看表是否创建成功
drop table emp;   #删除表

约束条件

在这里插入图片描述

(1)主键约束

主键约束:保证表中每行记录都不重复

主键,又称为”主码”,是数据表中一列或多列的组合。 主键的作用就是用来表示一个特定的行,没有主 键,更新或者删除表中特定的行会比较困难,因为没有安全的方法保证只涉及相关的行。 使用主键,能 够惟一地标识表中的一条记录,并且可以结合外键来 定义不同数据表之间的关系,还可以加快数据库查 询的速度。

原则上,表中的任何列都可以作为主键,只需要满足以下条件:

  • 任意两行都不具有相同的主键值(唯一)
  • 每个行都必须具有一个主键值,且主键值不允许NULL值(非空)

【注意】这里列出的规则是MySQL本身强制实施的。
主键分为两种类型:单字段主键和多字段主键。对于单字段主键,主键通常定义在表的一列上,比如: 对于下面的员工表来说,部门ID就可以作为主键。对于多字段主键,必须保证构成主键的所有列值的组 合是唯一的(单个列值可以不唯一)。

#单字段主键
create table emp(
depid char(3) primary key,
depname varchar(20),
peoplecount int
);

#多字段主键
create table emp(
depid char(3),
depname varchar(20),
peoplecount int,
primary key(depid,depname)
);

(2)非空约束

非空约束,指的是字段的值不能为空:
语法:字段名 字段类型 not null

#非空约束
create table emp(
depid char(3) primary key,
depname varchar(20) not	null,
peoplecount int
);

(3)唯一性约束

唯一性约束,要求该列的值必须是唯一的:

  • 允许为空,但只能出现一个空值;
  • 一个表中可以有多个字段声明为唯一的;
  • 唯一约束确保数据表的一列或几列不出现重复值;

语法:字段名 数据类型 unique

create table emp(
depid char(3) primary key,
depname varchar(20) not	null,
peoplecount int unique
);

在这里插入图片描述
这里我们通过3张表进一步理解主键和唯一键的异同点:
在这里插入图片描述
这三张表分别是用户信息表、商品表和用户商品交易表。对于用户信息表来说,Uid字段既可以用作主键也可以设置为唯一键,因为它的观测值既不重复也没有NULL,而Email字段就只能设置为唯一键,因为存在一个NULL值;对于商品表而言,Prod_Id字段可以设置为主键,因为观测值既不重复也没有缺失;对于用户商品交易表,Uid字段、Order_Id字段、Prod_Id字段都存在重复值,所以它们都不能作为主键和唯一键,但是可以将Uid字段和Prod_Id字段看作一个组合,它们就可以用作主键或唯一键了。

(4)默认约束

默认约束,指定某个字段的默认值:

  • 如果新插入一条记录时没有为默认约束字段赋值,那么系统就会自动为这个字段赋值为默认约束设定的值
  • 语法:字段名 数据类型 default 默认值
create table emp(
depid char(3) primary key,
depname varchar(20) not	null default "-",
peoplecount int unique
);

(5)自增字段

自增字段:一个表只能有一个自增字段,自增字段必须为主键的一部分。默认情况下从1开始自增。

练习:创建含各种约束条件的数据表

create table emp(
depid char(3) primary key auto_increment,
depname varchar(20) not	null default "-",
peoplecount int unique
);

手工建表

尝试创建一个表:

create table fruits(
f_id char(10) not null,
s_id int not null default 0,
f_name char(255),
f_price decimal(8,2) not null,
primary key(f_id)
);
#如果使用DECIMAL表示浮点型,需要指定参数M和D的值,其中M表示浮点数值中包含的所有数字
#个数,D表示浮点数值中小数位的数字个数,例如,DECIMAL(5,2)表示数值最多包含5个数字,其
#中小数位占两位,也就是说DECIMAL(5,2)的取值范围为[-999.99,999.99]

创建好之后,其实只是创建了一个表的框架,目前表里面是空的、还没有数据,现在尝试用insert into语句为表插入数据:
语法:insert into table_name(variable_list) values (value_list),(value_list),……,(value_list);

# 插入数据
insert into fruits(f_id,s_id,f_name,f_price) values
('a1',101,'apple',5.2),
('b1',101,'blackberry',10.2),
('bs1',102,'orange',11.2),
('bs2',105,'melon',8.2),
('t1',102,'banana',10.3),
('t2',102,'grape',5.3),
('o2',103,'coconut',9.2),
('c0',101,'cherry',3.2),
('a2',103,'apricot',25.2),
('l2',104,'lemon',6.4),
('b2',104,'berry',7.6),
('m1',106,'mango',15.6),
('m2',105,'xbabay',2.6),
('t4',107,'xbababa',3.6),
('b5',107,'xxxx',3.6);

select * from test.fruits; #查看表

# 向f_id,s_id,f_price中插入两条数据 
Insert into fruits(f_id,s_id,f_price) values 
("c1",105,8.8), 
("m3",106,5.2); 
# 查看表 
select * from fruits;

在数据插入的过程中,需要注意三点:

  1. 必须确保待插入的变量个数(variable_list)与实际插入的观测值个数(value_list)完全一样
  2. 必须确保待插入的变量顺序与实际插入的观测值顺序完全一样
  3. 确保待插入的变量类型与实际插入的观测值类型完全一样,这一点非必须满足,但必须符合可转换性,也就是说如果变量类型是整型,插入的值可以是数值也可以是字符型的数值

sql练习

create database train;
use train;

create table film_top10
(
m_rank tinyint auto_increment primary key,
m_name varchar(50),
uptime year,
country varchar(20),
director VARCHAR(30), 
m_type SET('剧情','犯罪','爱情','同性','动作','喜剧','战争','动画','奇幻','灾难','历史','悬疑','冒险','科幻'), 
score DECIMAL(2,1), 
Num_Commentaries INT, 
m_description VARCHAR(100)
);

INSERT INTO film_top10(m_name,uptime,country,director,m_type,score,Num_Commentaries,m_description) VALUES
 ('肖申克的救赎',1994,'美国','弗兰克·德拉邦特','犯罪,剧情',9.6,1034791,'希望让人自由。'), 
 ('霸王别姬',1993,'中国大陆 香港','陈凯歌','剧情,爱情,同性',9.5,753297,'风华绝代。'), 
 ('这个杀手不太冷',1994,'法国','吕克·贝松','剧情,动作,犯罪',9.4,968089,'怪蜀黍和小萝莉不得不说的故事。'), 
 ('阿甘正传',1994,'美国','Robert Zemeckis','剧情,爱情',9.4,824062,'一部美国近现代史。'), 
 ('美丽人生',1997,'意大利','罗伯托·贝尼尼','剧情,喜剧,爱情,战争',9.5,481250,'最美的谎言。'), 
 ('千与千寻',2001,'日本','宫崎骏','剧情,动画,奇幻',9.3,771592,'最好的宫崎骏,最好的久石让。'), 
 ('泰坦尼克号',1997,'美国','詹姆斯·卡梅隆','剧情,爱情,灾难',9.3,763515,'失去的才是永恒的。'), 
 ('辛德勒的名单',1993,'美国','史蒂文·斯皮尔伯格','剧情,历史,战争',9.4,437907,'拯救一个人,就是拯救整个世界。'), 
 ('盗梦空间',2010,'美国 英国','克里斯托弗·诺兰','剧情,科幻,悬疑,冒险',9.3,861722,'诺兰给了 我们一场无法盗取的梦。'), 
 ('机器人总动员',2008,'美国','安德鲁·斯坦顿','爱情,科幻,动画,冒险',9.3,565035,'小瓦力,大人生。');
 
select * from film_top10;
 
insert into film_top10(m_name,uptime,score,Num_Commentaries) values
 ('三傻大闹宝莱坞','2009','9.2',775279), 
 ('海上钢琴师','1998','9.2',663039);
 
    select * from film_top10;
举报

相关推荐

0 条评论