Mysql学习笔记(二)数据库的基本操作

一、创建数据库

现在介绍一些创建数据库的基础语句:

create database TestDB;  # 默认的方式创建数据库
create database TestDB default character set utf8;  # 创建utf-8字符编码的数据库
create database if not exists TestDB;  # 如果TestDB不存在就创建
alter database TestDB default character set utf8;  # 修改数据库TestDB的默认编码方式
drop database TestDB;  # 删除数据库TestDB

二、创建表

首先进入数据库容器

use TestDB;

创建一个student表

create table student(sno int,name varchar(20));

当我们打开navicat中表格右键选择设计表的时候,正常情况下我们做数据的正常存储时使用的引擎就是InnoDB

图片.png

一般情况下,我们在navicat里也不怎么使用命令行,用的最多是查询编辑器界面,只需选中数据库然后右击查询,新建查询,在查询编辑器中可以更灵活的使用mysql语句,支持代码联想、指定片段执行、注释等功能。
图片.png

注意:
这里通常会报一些1055的错误,是navicat与MySQL的兼容性问题,可以忽略。
另外,在创建表格的语句中,最后一个字段不要加逗号;

三、MySQL中数据类型

图片.png
MySQL浮点数据类型 含义
float(m,d) 单精度浮点类型,8位有效精度,m总个数,n小数位
double(m,d) 双精度浮点类型,16位有效精度,m总个数,n小数位
MySQL时间日期数据类型 格式 含义
date yyyy-MM-dd 存储日期值
time HH:mm:ss 存储时分秒
year yyyy 存储年
datetime yyyy-MM-dd HH:mm:ss 存储日期时间
timestamp yyyy-MM-dd HH:mm:ss 存储日期时间,可作时间戳
MySQL字符数据类型 含义
char(n) 固定长度
varchar(n) 最大长度内的可变长度

四、表的增删查改

我们以创建一个存储学生信息的表为例,记录学号、姓名、性别、生日、手机、邮箱、地址等信息,来展示数据库表的基本操作。
(1)创建表格

create table if not exists Student
(
    sno int UNSIGNED,
    sname varchar(10),
    gender char(3),
    birthday date,
    mobile char(11),
    email varchar(100),
    address varchar(200)
)

注意:unsigned表示无符号整型,一个中文字符占三个长度;
(2)删除数据

drop table Student  # 删除整个表格
delete from Student where gender='女';  # 删除表格中的指定数据

(3)修改表格

alter table Student add column StudentDSC text

(4)插入一行数据

insert into Student(sno,sname,gender,birthday,mobile,email,address) values (95001,'小雨','男','2020-10-13','13522362888','12234343@163.com','广东省广州市番禺区贵州大学城');

(5)插入多行数据

insert into Student(sno,sname,gender,birthday,mobile,email,address) values 
(95002,'小雨','男','2020-10-13','13522362233','12234343@163.com','广东省广州市番禺区贵州大学城'),
(95003,'小花','女','2020-10-13','13522362888','12234343@163.com','北京市海淀区清华大学'),
(95004,'小点','男','2002-10-13','13522362233','12234343@163.com','江苏省南京市东南大学');

(6)查询数据

select * from Student;
select sno,sname from Student where mobile like '%888'

(7)修改数据

update Student set gender='女';  # 把所有信息都修改了
update Student set gender='男' where sname='小花' or sno='95004';  # 只改其中的某一条信息
update Student set birthday='1998-12-12' where mobile like '%888'

五、MySQL约束

1. 主键

主键(Primary Key)保证某一个字段唯一,不能为空,在一个表中,主键只能有一个;
设置主键的两种方法:
(1)直接设置主键名

create table Student01
(
    sno int primary key, 
    sname varchar(20)
);

(2)在结尾设置主键,通过约束的方式设置主键并取别名。

create table Student02
(
    sno int,
    sname varchar(20),
    constraint PA_sno primary key(sno)
);

我们以借书表为例

create table BorrowBook
(
    sno int,    # 学生编号
    bookid int, # 图书编号
    borrowdate date,    # 借书时间
    returndate date # 还书时间
)

我们该定义哪一个属性为主键呢?
把学生编号定义为主键,不合理,因为一个学生会借多本书;
把图书编号定义为主键,也不合理,因为一本书会被多个学生借阅;
所以正确的办法是,我们把学生编号和图书编号捆绑在一起,形成一个复合主键。因为一个人借一本书是唯一的,因为一个学生借阅了唯一编号这本书后,如果不还就不能在借这本书了!(即使是图书馆中书名相同的书,编号也是不同的)。

复合主键的定义:
create table BorrowBook
(
    sno int,    # 学生编号
    bookid int, # 图书编号
    borrowdate date,    # 借书时间
    returndate date,    # 还书时间
    constraint Pk_BorrowBook Primary Key(sno,bookid)  # 定义复合主键
)
2.唯一键

唯一键(Unique Key)它主要是用来保证字段不能重复,主键只能设置一个,而唯一键可以设置多个,且唯一键可以设置字段为空。

# 设置唯一键
create table Student
(
    SNO int,
    SName VARCHAR(20) not null,
    Gender char(3),
    Birthday date,
    Mobile varchar(20),
    Email varchar(100),
    Address varchar(200),
    Constraint Pk_SNO primary key(SNO),  # 主键
    Constraint Uq_Mobile unique(Mobile),  # 唯一键
    Constraint Uq_Email unique(Email)  # 唯一键 
);
3.外键

外键(foreign key)用来保证数据的完整性,用来校验某个数据是否在另一个表中存在,如果存在则正常,如果不存在则报错。
如果我们定义一个学生借书的表,填入的学号来自学生表,填入的图书编号来自图书表,这样通过外键的方式定义学号和图书编号就能在一定程度上保证数据的合法性与正确性。

# 定义学生表
create table Student
(
    SNO int,
    Constraint Pk_SNO primary key(SNO),
);
# 定义图书表
create table Book
(
    Bookid int,
    Constraint Pk_Bookid primary key(Bookid)
);
# 定义读书借阅表
create table BorrowBook 
(
    SNO int,
    Bookid int,
    Constraint Pk_Borrow_Book primary key(SNO,Bookid),
    Constraint Fk_SNO foreign key(SNO) references Student(SNO),
    Constraint Fk_Bookid foreign key(Bookid) references Book(Bookid)
);

六、创建数据库表综合实践

1. 字段数值自增

我们在添加学生信息的学号时,初始学号时95001,接着是95002,如果每次添加一次数据学号都能自动加一,就不用每次都手动添加学号了。实际上,我们只需要在需要自增的字段后添加一个Auto_increment属性,并且可以在括号外面给Auto_increment赋一个初始值。

SNO int Auto_increment,
2. 给字段添加注释

MySQL语句可以添加注释,除此之外我们还可以给定义的每一个字段添加注释。

SNO int Auto_increment comment '学号',
3. 获取当前时间

如果需要给字段设置当前时间属性,可以使用now()方法,但是字段的类型最好设置成datatime型,如果设置成date型,可能无法调用now方法

Borrow_date datetime default now() comment '借书日期',
4. 案例

以创建借书表为例,先创建学生信息表,再创建图书信息表,最后创建借书表,综合了主键、唯一键、外键、备注、数值自增、自动获取时间等知识。

# === 创建学生信息表 === 
create table Student
(
    SNO int Auto_increment comment '学号', 
    SName varchar(20) not null comment '姓名',
    Gender char(3) not null comment '性别',
    Birthday date comment '出生日期',
    Email varchar(100) comment '邮箱',
    Mobile varchar(20) comment '手机号',
    Address varchar(200) comment '地址',
    Constraint Pk_SNO primary key(SNO),
    Constraint Uk_Mobile unique key(Mobile),
    Constraint UK_Email unique key(Email)
)Auto_increment = 95001;

# ==== 创建图书信息表 ====
create table Book
(
    Bookid int Auto_increment comment '图书编号',
    BookName varchar(20) not null comment '书名',
    Author varchar(20) not null comment '作者',
    Price float(8,2) comment '定价',
    Press varchar(30) comment '出版社',
    Constraint Pk_Bookid primary key(Bookid)
)Auto_increment = 8001;

# === 创建借书表 ===
create table BorrowBook
(
    Borrow_id int Auto_increment comment '借书编号',
    SNO int not null comment '学生编号',
    Bookid int not null comment '图书编号',
    Borrow_date datetime default now() comment '借书日期',
    Return_date datetime default null comment '还书日期',
    Constraint Pk_Borrow_id primary key(Borrow_id),
    Constraint Fk_SNO foreign key(SNO) references Student(SNO),
    Constraint Fk_Bookid foreign key(Bookid) references Book(Bookid)
);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容