MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结🙄
表操作
一 : 修改表表表表表表表表表: ALTER TABLE
语法
1. 改表名rename
alter table 表名
rename 新表名
2. 增加字段add
alter table 表名
add 字段名 数据类型 (完整性约束条件)
add 字段名 数据类型(完整性约束条件)
3. 删除字段 drop
alter table 表名
drop 字段名;
4. 修改字段
modify 字段名 数据类型 (完整约束条件);
change 旧字段名 新字段名 旧数据类型 (完整性约束条件);
change 旧字段名 新字段名 新数据类型(完整性约束条件);
二 : 复制表 :
复制表结构+记录 (key不会复制: 主键、外键和索引) mysql> create table new_service select * from service;
三 : 数据类型
1. char : 定长,简单粗暴,浪费空间,存取速度快.
char(10) 意思就是存储字符时,小于10个字符,会向右填充空格来满足长度.但是检索或者查询时,会自动删除尾部空格,除非你打开它.
2. vachar : 变长,节省空间,存取速度慢
carchar(10): 不会自动填充空格,如果'ad '尾部空格也会被存到.检索时,你怎么存的就怎么显示.
效率 : char > varchar > text
补充:
text : 用于保存变长的大字符串 如:878787(2**13 -1)个字符
length : 查看字节数
char_length : 查看字符数
tinyint(m) 1个字节 范围(-128~127)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)
四 : 枚举类型(enum)和集合类型(set)
- enum 单选 只能在给定的范围内选择,如单选框,多选框.
- set 多选 只能在给定的范围内炫则一个或多个值(爱好1,爱好2,爱好3..)
: 完整性约束 重点重点重点!!!!!
作用:用于保证数据的完整性和一致性.
- not null 和 defult
- unique : 唯一
- primary key : 主键
- auto_increment : 自增长
- foreign key : 外键
1. 如果字段不允许为空,就必须写上 not null.
例子: sex enum('male','female') not null default 'male'; ###enum: 性别要从后面给出的条件中挑选出一个,且不能为空,如果不填的话,默认值就是 'male'.
注意:not null 和 '' 不一样!
2. unique: 设置唯一约束
2.1 unique 和 not null 碰到一起的话,desc 改表结构的话,会看到该字段的 key 会是 primary.
2.2 联合唯一:
create table service(
id int primary key auto_increment,
name varchar(20),
host varchar(15) not null,
port int not null,
unique(host,port) #联合唯一
);
mysql> insert into service values
-> (1,'nginx','192.168.0.10',80),
-> (2,'haproxy','192.168.0.20',80),
-> (3,'mysql','192.168.0.30',3306)
-> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> insert into service(name,host,port) values('nginx','192.168.0.10',80);
ERROR 1062 (23000): Duplicate entry '192.168.0.10-80' for key 'host'
3. primary key : 设置主键
单列做主键
多列做主键(复合主键)
注意! 一个表内只能有一个主键 primary key
单列主键我们就不举例了,
多列做主键
create table service(
ip varchar(15),
port char(5),
service_name varchar(10) not null,
primary key(ip,port)
);
4. auto_increment : 自增长
约束字段为自增长,被约束的字段必须同时被 key键约束.
4.1 在创建表的时候设置初始值 auto_increment = 3 ;
或者是创建表时不设置,然后在创建完后修改它 : alter table 表名 auto_incretment = 3 ;
对于自增的字段,在用 delete 删除后,再插入值,该字段扔按照删除前的位置继续增长.
应该用 truncate 清空表,比起 delete 一条一条的删除, truncate 会方便很多,在删除大表时用 truncate.
4.2 自增步长:auth_increment_increment
设置步这里面涉及三个问题:
1. 级别:
#基于表级别
create table t1(
id int。。。
)engine=innodb,auto_increment=2 步长=2 default charset=utf8
#mysql自增的步长:
show session variables like 'auto_inc%';
#基于会话级别 set session
set session auth_increment_increment=2 #修改会话级别的步长
#基于全局级别的 set global
set global auth_increment_increment=2 #修改全局级别的步长(所有会话都生效)
2.步长和起始偏移量 : auto_increment_increment and auto_increment_offset
~~偏移量 : offset
WARNING:::::
If the value of auto_increment_offset dayu auto_increment_increment ,the value of offset is ignored(被忽略).
翻译:如果 偏移量的值大于步长的值的话,那么偏移量的值将被忽略. 如果 OFFSET > INCREMENT.
Example: 设置 auto_increment_increment = 3 , auto_increment_offset = 4 . 这种情况的话, offset 的值还是初始值,不会变成4.
5. foreign key
这个知识点,我另写了一篇,大多是习题.通过实例理解这个外键,多思考...
http://www.cnblogs.com/ugfly/p/7487990.html 直接拉到最底那部分.
MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结🙄的更多相关文章
- MySQL DROP TABLE操作以及 DROP 大表时的注意事项【转】
删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCAD ...
- MySQL DROP TABLE操作以及 DROP 大表时的注意事项
语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CA ...
- mysql批量update操作时出现锁表
https://www.cnblogs.com/wodebudong/articles/7976474.html 最近遇到一件锁表的情况,发现更新的语句where检索的字段,没有建索引,且是批量操作的 ...
- Mysql执行Update操作时会锁住表
update tableA a,(select a.netbar_id,sum(a.reward_amt) reward_amt from tableB a group by a.netbar_id) ...
- MYSQL数据库学习五 表的操作和约束
5.1 表的基本概念 表示包含数据库中所有数据的数据库对象.一行代表唯一的记录,一列代表记录的一个字段. 列(Columns):属性列,创建表时必须指定列名和数据类型. 索引(Indexes):根据指 ...
- Learning-MySQL【4】:表的操作管理和 MySQL 的约束控制
一.表的操作 1.表的基本概念 数据库与表之间的关系:数据库是由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构. 表由列和行组成,列是表数据的描述,行是表数据的实例. 表 ...
- MySql 库/表级操作 及 数据类型
数据库分类 关系型数据库(SQL):存储方式固定,安全 非关系型数据库(NoSQL):存储方式比较灵活,存储数据的效率比较高,不太安全 MySQL是一种关系型数据库管理系统(采用关系模型来组织管理数据 ...
- 表的操作管理和 MySQL 的约束控制
一.表的操作 1.表的基本概念 数据库与表之间的关系:数据库是由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构. 表由列和行组成,列是表数据的描述,行是表数据的实例. 表 ...
- SQL 表结构操作
数据库知识总结(表结构操作) 1.创建表Scores 1 create table Scores --表名 2 (Id int identity(1,1) primary key,--设置主键,并且行 ...
随机推荐
- 第四届河南省ACM 节能 区间DP
1001: 节 能 时间限制: 1 Sec 内存限制: 128 MB 提交: 21 解决: 9 [提交][状态][讨论版] 题目描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多 ...
- 简介CentOS与 Ubuntu的不同
1.关于登录用户 centos可以使用root登录 ubuntu不能使用root登录 centos普通用户默认不能通过sudo取得root权限执行命令, ubuntu可以,centos需要sudo时 ...
- ELK介绍
为什么用到ELK: 一般我们需要进行日志分析场景:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,需要集中化的日志管理,所有服务器上的日志收集汇总. ...
- tomcat线程初探
博主:handsomecui,希望路过的各位大佬留下你们宝贵的意见,在这里祝大家冬至快乐. 缘由: 初探缘由,在业务层想要通过(当前线程的栈)来获取到控制层的类名,然后打日志,可是发现并不能通过当前线 ...
- 3.python元组与列表
Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. 创建元组 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开 ...
- MySQL数据库使某个不是主键的字段唯一
在使用MySQL数据的过程中有时候我们须要某个不是主键的字段不反复.这个时候就要用到SQL的UNIQUE约束了. 以下摘抄自w3school里的一段介绍: UNIQUE 约束唯一标识数据库表中的每条记 ...
- Python的招牌菜xmlrpc
一.简单介绍 为了解决在系统的80port提供RPC的服务.而又不影响正在运行的WEB服务.人们想出了用HTTP协议传输RPC包的办法.对于差点儿是专门用于传输文本的HTTP协议.要在其上传输RPC封 ...
- 根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程
在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1 哪些知识点 ...
- MyBatis简单使用
MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使 ...
- Springboot 之 解决IDEA读取properties配置文件的中文乱码问题
问题描述 当在.properties的配置文件中有中文时,读取出来的总是乱码.比如我的application.properties配置文件的内容如下: server.port=9090 test.ms ...