(五)mysql表操作和约束条件
(1)表基本操作
1)创建表
create table 表名(字段 数据类型 约束条件)
mysql> create table student1(id int,name varchar(50),sex enum('w','f'),age int);
2)查看表
mysql> desc student1; #查看表结构
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| sex | enum('w','f') | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
mysql> show create table student1; #查看创表语句
----------------+| student1 | CREATE TABLE `student1` (
`id` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`sex` enum('w','f') DEFAULT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
3)删除表
drop table 表名
4)插入数据没有约束条件:数据可以重复
mysql> insert into student1 values(3,'wack','f',21),(4,'jaxc','w',18);
mysql> insert into student1 values(3,'wack','f',21),(4,'jaxc','w',18);
mysql> insert into student1(name,sex) values('wf','w');
mysql> insert into student1(name,sex) values('wf','w');
mysql> select * from student1;
| 4 | jaxc | w | 18 |
| 3 | wack | f | 21 |
| 4 | jaxc | w | 18 |
| NULL | wf | w | NULL |
| NULL | wf | w | NULL |
+------+------+------+------+
(2)表约束条件:保证数据的完整性和一致性
1)约束条件
primary key :标识字段为主键,可以唯一的标识记录,特性:唯一,不可以为空,一个表中只有1个主键
foreign key :标识字段为外键,实现表与表之间的关联
not null:标识该字段不能为空
unique key :标识该字段唯一,可以为空,一个表中可以有多个unique key
auto_increment:标识该字段的值自动增长(整数类型,而且是主键)
default :为该字段设置默认值
unsigned :无符号,正数
zerofill : 使用0填充
2)default默认值和not null非空
mysql> create table student1(id int not null,name varchar(50) not null,sex enum('m','f') default 'm' not null,age int unsigned default 18 not null);
mysql> desc student1;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(50) | NO | | NULL | |
| sex | enum('m','f') | NO | | m | |
| age | int(10) unsigned | NO | | 18 | |
+-------+------------------+------+-----+---------+-------+
mysql> insert into student1 values(1,'jack','m',21);
mysql> insert into student1(id,name) values(2,'robin');
mysql> insert into student1 values(3,null,'f',28);
ERROR 1048 (23000): Column 'name' cannot be null
3)primary key单列做主键测试
创建主键方式1:
mysql> create table student(id int auto_increment primary key,
-> name varchar(50) not null,
-> sex enum('m','f') not null default 'm',
-> age int not null default 18);
创建主键方式二:
mysql> create table student(id int auto_increment,
-> name varchar(50) not null,
-> sex enum('m','f') not null default 'm',
-> age int not null default 18, primary key(id));
mysql> desc student;
+-------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| sex | enum('m','f') | NO | | m | |
| age | int(11) | NO | | 18 | |
+-------+---------------+------+-----+---------+----------------+
mysql> insert into student values(1,'jack','m',18);
mysql> insert into student(name) values('robby');
mysql> insert into student values(1,'wf','m',20);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select * from student;
+----+-------+-----+-----+
| id | name | sex | age |
+----+-------+-----+-----+
| 1 | jack | m | 18 |
| 2 | robby | m | 18 |
+----+-------+-----+-----+
4)复合多列主键:多个列组合作为主键,单列值可以重复
mysql> create table service(ip varchar(15) not null,
-> service varchar(10) not null,
-> port int not null,
-> protocol enum('tcp','udp') not null default 'tcp',
-> allow enum('Y','N') default 'N',
-> primary key(ip,service));
mysql> desc service;
+----------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------------+------+-----+---------+-------+
| ip | varchar(15) | NO | PRI | NULL | |
| service | varchar(10) | NO | PRI | NULL | |
| port | int(11) | NO | | NULL | |
| protocol | enum('tcp','udp') | NO | | tcp | |
| allow | enum('Y','N') | YES | | N | |
+----------+-------------------+------+-----+---------+-------+
mysql> insert into service values('192.168.1.32','http',80,'tcp','Y');
mysql> insert into service(ip,service,port) values('192.168.1.32','ftp',21);
mysql> insert into service(ip,service,port) values('192.168.1.32','http',80);
ERROR 1062 (23000): Duplicate entry '192.168.1.32-http' for key 'PRIMAR
mysql> select * from service;
+--------------+---------+------+----------+-------+
| ip | service | port | protocol | allow |
+--------------+---------+------+----------+-------+
| 192.168.1.32 | dns | 53 | tcp | N |
| 192.168.1.32 | ftp | 21 | tcp | N |
| 192.168.1.32 | http | 80 | tcp | Y |
+--------------+---------+------+----------+-------+
5)unique:标识该字段唯一,可以为空,一个表中可以有多个unique key
mysql> create table department(dept_id int,dept_name varchar(50) unique);
mysql> desc department;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| dept_id | int(11) | YES | | NULL | |
| dept_name | varchar(50) | YES | UNI | NULL | |
+-----------+-------------+------+-----+---------+-------+
mysql> insert into department values(1,"hr");
mysql> insert into department values(1,"it");
mysql> insert into department values(1,"hr");
ERROR 1062 (23000): Duplicate entry 'hr' for key 'dept_name'
mysql> select * from department;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 1 | hr |
| 1 | it |
+---------+-----------+
(3)修改表
1)语法
修改表:
alter table 表名 rename 新表名
增加字段:
alter table 表名 add 字段名 数据类型[约束条件]
alter table 表名 add 字段名 数据类型[约束条件] first;
alter table 表名 add 字段名 数据类型[约束条件] after 字段名;
删除字段:
alter table 表名 drop 字段名
修改字段类型:
alter table 表名 modify 字段名 数据类型[约束条件];
alter table 表名 change 旧字段名 新字段名 新数据类型[约束条件];
2)修改表的存储引擎:
mysql> alter table t1 engine=innodb;
3)添加字段
mysql> create table t1(id int);
mysql> alter table t1 add name varchar(50) not null,add age int not null default 20;
mysql> alter table t1 add num int not null after name, add sex enum('m','f') not null default 'm' first
4)删除字段
mysql> alter table t1 drop sex;
5)修改字段类型:
mysql> alter table t1 modify age tinyint; \\注意保留原有的约束条件
mysql> alter table t1 modify age tinyint not null default 20;
mysql> alter table t1 modify id int not null primary key auto_increment; \\在字段有主键的情况下添加auto_increment这种方法不行
ERROR 1068 (42000): Multiple primary key defined
mysql> alter table t1 modify id int not null auto_increment; \\在字段有主键的情况下添加auto_increment方式
6)添加复合主键:
mysql >alter table t2 add primary key(id,name);
7)添加主键:
mysql> alter table t1 modify id int not null primary key; \\添加主键,不建议
mysql> alter table t1 add primary key(id);
8)删除主键:如果字段有auto_increment约束,需要先删除这个约束才能在删除主键,因为自增依赖主键
mysql> alter table t1 drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> alter table t1 modify id int not null; \\先删除主键上的自增
mysql> alter table t1 drop primary key; \\删除主键
(4)复制表
1)复制表结构+记录,key不会复制,也就是主键丶索引不会复制
mysql> create table new_t1 select * from t1; \\key不会复制,也就是主键丶索引不会复制
2)只复制表结构
mysql> create table new_t2 select * from t1 where 1=3; //条件为假,查不到任何记录
3)复制表结构,包括key
mysql> create table new_t3 like t1;
(五)mysql表操作和约束条件的更多相关文章
- Python 3 mysql 表操作
Python 3 mysql 表操作 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为 ...
- 数据库 -- mysql表操作
一,存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:https://www.cnblogs.com/peng104/p/9751738.html 二,表介绍 表相当 ...
- mysql数据库从删库到跑路之mysql表操作
表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 内容: 1 创建表 ...
- MySQL 表操作 (Day40)
阅读目录 一.表介绍 二.创建表 三.查看表 四.修改表 五.删除表 六.操作表中的记录 一.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,则称为表 ...
- 8.3 mysql 表操作
库操作 一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等 performance_sch ...
- MySQL表操作及数据操作
表操作 表相当于一个文件,其形式与现实中的表格相同.表中的每条记录都有相应的字段,字段就类似于表格的表头. 表操作详细: #对表进行操作(文件) #首先要切换到指定库(即文件夹)下:use db1; ...
- mysql表操作与权限操作
修改表ALTER TABLE 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ...
- SQL学习笔记三之MySQL表操作
阅读目录 一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 存储引擎介绍 存储引擎即表类型,mys ...
- Mysql表操作《一》表的增删改查
一.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 二.创建表 语法 ...
随机推荐
- 【python】time 和datetime类型转换,字符串型变量转成日期型变量
s1='20120125'; 6 s2='20120216'; 7 a=time.strptime(s1,'%Y%m%d'); 8 b=time.strptime( ...
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Codeforces Round #553 F Sonya and Informatics
题目 题目大意 给定一个长为 $n$($2 \le n \le 100$)的01串 $S$ .对 $S$ 进行 $k$($1 \le k \le 10^9$)次操作:等概率地选取两个下标 $i, j$ ...
- bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 分块
这个题体现了分块不只是最大值最小值众数次数,而是一种清真的思想. 我们把整个序列分块,在每个块里处理每个位置跳出这个块的次数和跳出的位置,那么每次修改n0.5,每次查询也是,那么O(m* n0.5)的 ...
- Codeforces Round #534 (Div. 2) D. Game with modulo(取余性质+二分)
D. Game with modulo 题目链接:https://codeforces.com/contest/1104/problem/D 题意: 这题是一个交互题,首先一开始会有一个数a,你最终的 ...
- 关于ora-12154:TNS:could not resolve the connect identifier specified
一:前言 刚刚出来实习,在公司配的电脑里面装的oracle和PL SQL时一次性就搞定,但是在自己的电脑上装了就出现这个问题,刚刚在网上看了下,所以自己就写份记载吧! 二: 在打开PLSQL Deve ...
- MyEclipse中代码提醒功能
一:最近仔细研究了下spring mvc中的代码,自己在配置文件哪里来时出现问题,没有提醒,只好自己搜了下有关的信息.如下 window--->preferences---->java-- ...
- POJ 1064---二分搜索法
///2.假定一个解并判断是否可行 ///POJ1064 /** Q:有N条绳子,长度分别为Li,从中切割出k条长度相同的绳子, 这K条绳子最长能有多长?保留两位小数 A: 二分搜索模型. 条件C(x ...
- 【Atcoder】AGC 016 C - +/- Rectangle
[题意]给定大矩阵的边长H和W,给每格填数(<=|10^9|),要求大矩形总和为正数,而每个h*w的小矩形总和为负数,求构造方式. [算法]数学 [题解]结论题. ★当h|H&& ...
- Linux emacs考场配置及对拍脚本
emacs配置(待补) (global-set-key [f9] 'compile) (global-set-key [f10] 'gud-gdb) (global-set-ket (kbd &quo ...