mysql的表和约束操作
在创建表是默认为加上数据引擎和字符集,如创建一个student表,代码如下:
create table students(id int unsigned zerofill auto_increment primary key,
name varchar(20) not null, --不允许字段为null
sex char(1)
); -----------------------------自动加上数据引擎和字符集------------------------
create table students(id int unsigned zerofill auto_increment primary key,
name varchar(20) not null,
sex char(1)
)engines=innodb default charset=utf8;
- 插入数据(insert和replace)
1.insert命令直接在表的插入一条记录。
insert into students(sname,sex) values('orna','男');
insert into students(sname,sex) values('lisi','男');
insert into students(sname,sex) values('wangwu','男');
mysql> select * from students;
+------------+--------+------+------+
| id | sname | sex | tid |
+------------+--------+------+------+
| 0000000001 | orna | 男 | NULL |
| 0000000002 | lisi | 男 | NULL |
| 0000000003 | wangwu | 男 | NULL |
+------------+--------+------+------+
3 rows in set (0.00 sec)
2.replace命令在插入记录时判断主键是否相同,相同就修改,否则插入一条新记录。
replace into students(id,sname,sex) values(2,'luscy','女');
replace into students(id,sname,sex) values(20,'zhangsan','男'); mysql> select * from students;
+------------+----------+------+------+
| id | sname | sex | tid |
+------------+----------+------+------+
| 0000000001 | orna | 男 | NULL |
| 0000000002 | luscy | 女 | NULL |
| 0000000003 | wangwu | 男 | NULL |
| 0000000020 | zhangsan | 男 | NULL |
+------------+----------+------+------+
4 rows in set (0.00 sec)
- 用select 结果集创建一个表
mysql> select * from students;
+------------+-------+------+
| id | name | sex |
+------------+-------+------+
| 0000000001 | luscy | 女 |
| 0000000002 | lisi | 男 |
| 0000000003 | orna | 男 |
+------------+-------+------+
3 rows in set (0.00 sec) mysql> create table stu select * from students;
Query OK, 3 rows affected (0.33 sec)
Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from stu;
+------------+-------+------+
| id | name | sex |
+------------+-------+------+
| 0000000001 | luscy | 女 |
| 0000000002 | lisi | 男 |
| 0000000003 | orna | 男 |
+------------+-------+------+
3 rows in set (0.00 sec)
- 修改表名
有两种方法可以修改表名。
mysql> rename table stu to st;
Query OK, 0 rows affected (0.17 sec) mysql> alter table st rename to s;
Query OK, 0 rows affected (0.23 sec)
- 删除表
drop table 表名;
drop table 表1,表2,表3.............. 表示可以同时删除多少个表。
- 修改表的列名称
在修改字段需要注意几点:
- 修改字段宽度只能改大,不能改小;
- 修改字段类型时,要兼容;
mysql> alter table s change name sname varchar(30);
Query OK, 3 rows affected (1.02 sec)
Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from s;
+------------+-------+------+
| id | sname | sex |
+------------+-------+------+
| 0000000001 | luscy | 女 |
| 0000000002 | lisi | 男 |
| 0000000003 | orna | 男 |
+------------+-------+------+
3 rows in set (0.01 sec)
- 限定字段的取值范围
create table students(id int unsigned zerofill auto_increment primary key,
name varchar(20) not null,
sex enum('男','女') --指定取值范围。enum和set关键字同意
);
insert into students(name,sex) values('orna','男'); --插入数据成功 ------------------------------------插入数据时报错---------------------------------------
mysql> insert into students(name,sex) values('orna','未知');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> select * from students;
+------------+------+------+
| id | name | sex |
+------------+------+------+
| 0000000001 | orna | 男 |
+------------+------+------+
1 row in set (0.00 sec)
- 主建、外建和唯一
一个表只能有一个主键,但可以用多个字段建立一个组合主键。可以有多个外键和唯一约束。
- 增加主键
创建主键的两种方法:
--指定主键名
alter table s add constraint pk primary key(id);
--不指定主键名
alter table s add constraint primary key(id);
2.删除主键
mysql> desc s;
+-------+---------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+------------+-------+
| id | int(10) unsigned zerofill | NO | PRI | 0000000000 | |
| sname | varchar(30) | YES | | NULL | |
| sex | set('男','女') | YES | | NULL | |
+-------+---------------------------+------+-----+------------+-------+
3 rows in set (0.00 sec) mysql> alter table s drop primary key;
Query OK, 3 rows affected (0.82 sec)
Records: 3 Duplicates: 0 Warnings: 0 mysql> desc s;
+-------+---------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+------------+-------+
| id | int(10) unsigned zerofill | NO | | 0000000000 | |
| sname | varchar(30) | YES | | NULL | |
| sex | set('男','女') | YES | | NULL | |
+-------+---------------------------+------+-----+------------+-------+
3 rows in set (0.00 sec)
3.增加字段
在增加字段时,可以用first和after关键字,但没有before关键字。
mysql> alter table students add address varchar(50) not null after sex;
Query OK, 0 rows affected (0.49 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc students;
+---------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------------+------+-----+---------+----------------+
| id | int(10) unsigned zerofill | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | set('男','女') | YES | | NULL | |
| address | varchar(50) | NO | | NULL | |
+---------+---------------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
4.删除字段
mysql> select * from s;
+------------+-------+------+
| id | sname | sex |
+------------+-------+------+
| 0000000001 | luscy | 女 |
| 0000000002 | lisi | 男 |
| 0000000003 | orna | 男 |
+------------+-------+------+
3 rows in set (0.00 sec) mysql> alter table s drop column sex;
Query OK, 0 rows affected (0.63 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc s;
+-------+---------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+------------+-------+
| id | int(10) unsigned zerofill | NO | | 0000000000 | |
| sname | varchar(30) | YES | | NULL | |
+-------+---------------------------+------+-----+------------+-------+
2 rows in set (0.00 sec)
2.增加唯一约束
--创建表时增加唯一约束。
create table students(id int unsigned zerofill auto_increment primary key,
sname varchar(20) not null unique,
sex set('男','女'),
tid int unsigned
)engine=innodb default charset=utf8; --创建表后,再增加唯一约束。
alter table students add constraint uk unique(sname); mysql> desc students;
+-------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+----------------+
| id | int(10) unsigned zerofill | NO | PRI | NULL | auto_increment |
| sname | varchar(20) | NO | UNI | NULL | |
| sex | set('男','女') | YES | | NULL | |
| tid | int(10) unsigned | YES | | NULL | |
+-------+---------------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec) --删除唯一约束。
mysql> alter table students drop index uk;
Query OK, 0 rows affected (0.26 sec)
Records: 0 Duplicates: 0 Warnings: 0
3.增加外键约束
alter table students add constraint fk foreign key(tid) references teachers(id);
--alter table students add constraint fk foreign key(tid) references teachers(id) on delete set null;表示删除外键引用的记录时把当前记录的外键值修改成空。
--alter table students add constraint fk foreign key(tid) references teachers(id) on delete cascade;表示删除外键引用的记录时把当前记录同时删除。
--alter table students add constraint fk foreign key(tid) references teachers(id) on delete set null on update cascade;表示删除外键引用的记录时把当前记录的外键值修
--改成空,或者修改引用记录同时修改外键引用字段。
mysql> desc students;
+-------+---------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+----------------+
| id | int(10) unsigned zerofill | NO | PRI | NULL | auto_increment |
| sname | varchar(20) | NO | | NULL | |
| sex | set('男','女') | YES | | NULL | |
| tid | int(10) unsigned | YES | MUL | NULL | |
+-------+---------------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
4.删除外键约束
alter table students drop foreign key fk;
alter table students drop index fk;
5.创建索引
mysql> create index sname on students(sname desc);
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
--alter table students add index(sname desc);
6.删除索引
alter table students drop index sname;
--drop index sname on students;
mysql的表和约束操作的更多相关文章
- MySQL入门第一天——概述、数据表与约束操作
一.概述 1.安装 初学MySQL,我们下载msi的安装版:http://dev.mysql.com/downloads/file.php?id=457403 安装的过程文字简述可以参考之前随笔:ht ...
- 对mysql数据库表的相关操作
虫师博客(Python使用MySQL数据库(新)): https://www.cnblogs.com/fnng/p/3565912.html 1.更改表的结构,增加一个字段放置新增的属性 alter ...
- mysql之表的查看操作
一 补充一些杂碎的知识 1 插入数据: create table 新表名(字段 数据类型[约束条间]...) select 字段... from 旧表名 create table 新表名(字段 数据类 ...
- python之路--MySQL 库,表的详细操作
一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...
- mysql数据库表的查询操作-总结
转自:https://www.cnblogs.com/whgk/p/6149009.html 序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VA ...
- 二 mysql库表的详细操作
目录 1.库操作 1.创建数据库 2.数据库相关操作 2.表操作 1.存储引擎 2.表介绍 3.创建表 4.查看表结构 5.MySQL的基础数据类型 6.表的完整性约束 7.修改表 alter tab ...
- 最全MySQL数据库表的查询操作
序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...
- MYSQL关于表的一些操作
mysqldump -u username -p dbname > dbname.sql 清空表数据 delete from xxxx; 插入一条数据 insert into tablename ...
- MySQL之表的约束
一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...
随机推荐
- 红色警戒3原版V1.00基址大全
127.0.0.1 servserv.generals.ea.com ===================================1.04 基址变化 00DFBD74=>DFCDF4 ...
- oracle存储过程删除树状结构的表数据
今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...
- C#语法之匿名函数和Lambda表达式
上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...
- 跟大佬一起读源码:CurrentHashMap的扩容机制
并发编程——ConcurrentHashMap#transfer() 扩容逐行分析 前言 ConcurrentHashMap 是并发中的重中之重,也是最常用的数据结构,之前的文章中,我们介绍了 put ...
- 重置Root用户密码
在忘记root用户密码是用于重置root用户密码: 1.开机按e. 2.在linux16开头的一行的末尾添加rd.break,按ctrl+x. 3.依次执行命令: mount -o remount,r ...
- Android 蓝牙操作详解
1.启用蓝牙并使设备处于可发现状态 1.1 在使用BluetoothAdapter类的实例进操作之前,应启用isEnable()方法检查设备是否启用了蓝牙适配器. // 使用意图提示 ...
- videojs IE8无法播放解决方案
1.如果是在.cs文件里初始化视频元素,没有遇到无法播放问题. 2.如果是js动态换播放器的poster和src遇到此问题,解决办法是用videojs提供的函数来设置 https://github.c ...
- [C语言] 数据结构-预备知识动态内存分配
动态内存分配 静态内存分配数组 int a[5]={1,2,3,4,5} 动态内存分配数组 int len=5; int *parr=(int *)malloc(sizeof(int) * len) ...
- 推荐 VSCode 上特别好用的 Vue 插件 - vetur
作者 @octref 此前 V2EX 发过帖子,最近新增代码补全功能,综合比较应该是目前 VSCode 上面最好用的 Vue 插件. 能够实现在 .vue 文件中: 语法错误检查,包括 CSS/SCS ...
- 小tip: base64:URL背景图片与web页面性能优化——张鑫旭
一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...