MySQL入门到放弃

image

1 查看当前数据库

select database();

2 创建数据库

create database test;

设置UTF8格式

create database test1 default charset='utf8'; 

3 切换数据库

use mysql;

4 创建数据表

(1)第一种形式

mysql> create table pet (

name VARCHAR(20),

owner varchar(20),

species varchar(20),

sex varchar(10),

birth DATE,

death DATE);

(2)第二种形式

create table test (name VARCHAR(20),owner varchar(20),species varchar(20),death DATE);

5 查看数据表结构

desc test;

6 查看数据表所有内容

select * from test;

7 数据表中插入数据

insert into pet values ('k1','zt','cat','f','2001-04-01',NULL);
insert into pet values ('kkk','zt1','cat1','f1','2001-04-02',NULL);
insert into pet values ('kkk','zt1','cat3','f1','2001-04-02',NULL);

8 删除数据表中的数据

delete from pet where species='cat1';

9 修改数据表数据

update pet set name='zhangsan' where species='cat2';

10 mysql创建表格约束

(1)主键约束-primary约束

它可以确定一个表中的唯一记录,也就是给表格某个字段添加约束,就可以确定其唯一性且不为空

create table user (id int primary key,name varchar(20));

mysql> insert into user values(1,'kobe');
Query OK, 1 row affected (0.01 sec)

mysql> insert into user values(1,'kobe');
ERROR 1062 (23000): Duplicate entry '1' for key 'user.PRIMARY'

mysql> insert into user values(NULL,'kobe');
ERROR 1048 (23000): Column 'id' cannot be null
(2)主键约束-联合约束

只要两个主键值加起来不重复就可以

create table user2(id int,name varchar(20),password varchar(20),primary key(id,name));

insert into user2 values(1,'zhangsan','123');

insert into user2 values(2,'zhangsan','123');

insert into user2 values(2,'lisi','123');

insert into user2 values(NULL,'lisi','123');

mysql> insert into user2 values(NULL,'lisi','123');

ERROR 1048 (23000): Column 'id' cannot be null
(3)主键约束-自增约束
create table user3(id int primary key auto_increment,name varchar(20));**

insert into user3 (name) values('san');
(4)主键约束-忘记创建主键约束:建表后添加与删除
create table user4(id int,name varchar(20));

alter table user4 add primary key(id);

1 修改表结构,添加主键

alter table user4 add primary key(id);

2 修改表结构,删除主键

alter table user4 drop primary key;

3 使用modify修改字段,添加约束

alter table user4 modify id int primary key;
(5)主键约束-唯一约束

1 约束修饰字段的值不可以重复

create table user5(id int,name varchar(20));

2 添加唯一约束

alter table user5 add unique(name);

创建表user5进行测试

create table user5(id int,name varchar(20));

alter table user5 add unique(name);

insert into user5 values(1,'zhangsan');

insert into user5 values(1,'zhangsan');

第二种方式,表示两个键(id,name)组合在一起不重复就OK
create table user6(id int,name varchar(20),unique(id,name));
insert into user6 values(1,'zhangsan');
insert into user6 values(1,'zhangsan');
ERROR 1062 (23000): Duplicate entry '1-zhangsan' for key 'user6.id'

3 如何删除唯一约束

alter table user6 drop index name;
mysql> alter table user6 drop index id;

Query OK, 0 rows affected (0.03 sec)

Records: 0  Duplicates: 0  Warnings: 0

4 modify添加唯一约束

alter table user6 modify name varchar(20) unique;
mysql> alter table user6 modify name varchar(20) unique;

Query OK, 0 rows affected (0.03 sec)

Records: 0  Duplicates: 0  Warnings: 0
(6)约束-非空约束
create table user7(id int,name varchar(20) not null);
mysql> create table user7(id int,name varchar(20) not null);
Query OK, 0 rows affected (0.04 sec)
insert into user7 (id) values(1);
mysql> insert into user7 (id) values(1);
ERROR 1364 (HY000): Field 'name' doesn't have a default value
insert into user7 (id,name) values(1,'zhangsan');
insert into user7 values(1,'zhangsan');
mysql> insert into user7 (id,name) values(1,'zhangsan');
Query OK, 1 row affected (0.01 sec)
insert into user7 (name) values('lisi');
mysql>  insert into user7 (name) values('lisi');
Query OK, 1 row affected (0.01 sec)
(7)约束-默认约束-default

当我们插入字段值时,没有传值时,就会使用默认值

create table user8(id int,name varchar(20),age int default 10);

插入数据
insert into user8 (id,name) values(1,'zhang_san');

insert into user8 values(1,'zhang_san',19);
(8)约束-外键约束-foreign_key

---涉及到两个表:主表、副表

---主表、副表

---班级
1 创建classes表

create table classes(id int primary key,name varchar(20));

2 创建students表

create table students(id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id));

3 classes表格插入数据

insert into classes(id,name) values(1,'一班');
insert into classes(id,name) values(2,'二班');
insert into classes(id,name) values(3,'三班');
insert into classes(id,name) values(4,'四班');

4 修改表格数据

mysql>  update classes set name='fourth class' where id=4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

---学生

insert into students values(1001,'zhang-tian',1);

insert into students values(1002,'li-tian',2);

insert into students values(1003,'zhao-tian',3);

insert into students values(1004,'sun-tian',4);

insert into students values(1005,'error',5);

---1主表(父表)classes中的没有的数据值,在副表(子表)中不可使用

---2主表中的记录被副表引用时,是不可删除的

mysql> insert into students values(1005,'error',5);

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

(`python`.`students`, CONSTRAINT `students_ib` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))

11数据表设计-第一范式1NF

数据表中所有数据都是不可分割的原子值?

create table student2(id int primary key,name varchar(20),address varchar(30));

insert into student2 values(1,'kobe','lakes_eight_S+');

insert into student2 values(2,'james','miami_six_S+');

insert into student2 values(3,'jordan','bulls_twenty_S+');

update student2 set address='bulls_twenty_S+' where id='3';

字段值还可以继续拆分的,就不满足第一范式

create table student3(id int primary key, name varchar(20), team varchar(30), number varchar(20), grade varchar(20));

insert into student3 values(1,'kobe','lakers','8','S+');

insert into student3 values(2,'james','miami','6','S+');

insert into student3 values(3,'jordan','bulls','23','S+');

范式设计的越详细,对于某些实际操作可能会更好,但是不一定都是好处


12数据表设计-第二范式2NF

必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖主键

如果出现不完全依赖,则只可能发生在联合主键的情况下。

create table my_order(product_id int, customer_id int, product_name varchar(20), customer_name varchar(20), primary key(product_id,customer_id));

问题?

除主键以外的其他列,只依赖主键的部分字段

拆表

create table myorder(order_id int primary key, product_id int, customer_id int);

create table product(id int primary key, name varchar(20));

create table customer(id int primary key, name varchar(20));

分成三个表以后,就满足了第二范式


13数据表设计-第三范式3NF

必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系

create table myorder(order_id int primary key, product_id int, customer_id int, customer_phone varchar(20));

customer_phone不应该放在myorder表里面,需要放在customer里面,这样可以不重复

create table customer(id int primary key, name varchar(20), phone varchar(20));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容