继续体验sql之数据操作和约束

Posted 活人就是矫情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继续体验sql之数据操作和约束相关的知识,希望对你有一定的参考价值。

主键

  主键就是在一个数据表中可以唯一标识该表中的每一条信息。

比如我们上个数据表

 

 很显然id可以成为主键,因为这里面只有id不会重复

 

那么如何指定某一个字段为主键?

两种方法:1、在创建数据表的时候声明   2、创建后指定

<字段名> <数据类型> PRIMARY KEY [默认值]
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

 

mysql> CREATE TABLE tb2
    -> (
    -> id INT(10) PRIMARY KEY,
    -> name VARCHAR(20)
    -> );

 

 

创建后修改主键

mysql> ALTER TABLE tb1 ADD PRIMARY KEY(id);

 

 

设置联合主键(将id class设为主键)

mysql> CREATE TABLE tb4
    -> (
    -> id INT(10),
    -> name VARCHAR(20),
    -> class VARCHAR(20),
    -> PRIMARY KEY(id,class)
    -> );

 

 

 

删除主键约束

ALTER TABLE <数据表名> DROP PRIMARY KEY;

 

 

 

主键自增长

比如序列号,每多一个数据进来,序列号自动+1

mysql> CREATE TABLE tb5
    -> (
    -> id INT(10) PRIMARY KEY AUTO_INCREMENT,#主键自增长
    -> name VARCHAR(20) NOT NULL
    -> )AUTO_INCREMENT=100; #设置主键自增长初始值(可以不加这句)

 

 

 

唯一约束

指所约束的字段值不能重复出现,比如学号,不可以重复

设置唯一约束

<字段名> <数据类型> UNIQUE

添加唯一约束

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);

删除唯一约束

ALTER TABLE <表名> DROP INDEX <唯一约束名>;

 

 

 

默认值

在创建数据表示,设置默认值,比如工科学院性别默认值可以设置为男

创建表时设置默认值

<字段名> <数据类型> DEFAULT <默认值>;

修改时添加默认值

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;

删除默认值

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;
mysql> CREATE TABLE tb7
    -> (
    -> id INT(10),
    -> name VARCHAR(20),
    -> sex VARCHAR(5) DEFAULT \'man\'
    -> );

 

mysql> ALTER TABLE tb7
    -> CHANGE COLUMN sex sex VARCHAR(5) DEFAULT NULL;

 

 

 

非空约束

可以设置某字段比如有值,否则这条数据就无效。比如上例的名字

创建表时设置非空约束

<字段名> <数据类型> NOT NULL;

修改表时添加非空约束

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;

删除非空约束

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;

 

 

插入数据

拿我们刚才的tb7举例

我要插入一条数据 id :1    name :xiaowang   sex :man

mysql> INSERT INTO tb7
    -> VALUES(1,\'xiaowang\',\'man\');

 

那如果我不想按照这个顺序呢,可以指定自己的顺序,比如 name id sex

mysql> INSERT INTO tb7
    -> (name,id,sex)
    -> VALUES(\'xiaoliu\',2,\'man\');

 

 

 

修改数据

UPDATE <表名> SET 字段 1=1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]

 比如我们现在把刚才小王和小刘性别改成女

mysql> UPDATE tb7 SET sex = \'woman\';

 

 

刚才那个命令改了全部的数据

现在我们只改一个

mysql> UPDATE tb7
    -> SET sex=\'man\'
    -> WHERE name=\'xiaowang\';

 

 

 

删除数据

把小刘的那条数据删掉

mysql> DELETE  FROM tb7
    -> WHERE name=\'xiaoliu\';

 

删除全部数据

就不需要加 WHERE 的限制条件了

 

 

 

 

 

查看表中所有字段

SELECT * FROM 表名;

查看指定字段

SELECT < 列名 > FROM < 表名 >;

 

 

 

去重

过滤数据

SELECT DISTINCT <字段名> FROM <表名>;

 

 

排序

ORDER BY <字段名> [ASC|DESC]

现在我们对刚才的数据以名字排序

mysql> SELECT * FROM tb7 ORDER BY name;

 

 

 

条件查询

比如刚才的表,我只想查xiaofeng是男的女的,那么可以用这个语句

mysql> SELECT name,sex FROM tb7 WHERE name=\'xiaofeng\';

 

 

再比如我要查所有男性的名字

mysql> SELECT name,sex FROM tb7 WHERE sex=\'man\';

 

 

 

那如果我要想查序号低于4的男性呢

mysql> SELECT id,name,sex FROM tb7 WHERE sex=\'man\' AND id < 4;

 

除了 AND 还有 OR XOR 分别是 与或非

 

 

现在我要查所有名字以xiao开头的人的性别

mysql> SELECT name,sex FROM tb7 WHERE name LIKE \'xiao%\';

 

或者查找不以xiao开头的人

 

 

可以看出%表示不指定字符个数,相应的 _ 就是指定了1个字符

比如我要查所有x开头 同时 x后面只有6位的人

mysql> SELECT name,sex FROM tb7 WHERE name LIKE \'x______\';

 

 

 

范围查询

[NOT] BETWEEN 取值1 AND 取值2

如果我想查所有id在2-5之间的人

mysql> SELECT id,name,sex FROM tb7 WHERE id BETWEEN 2 AND 5;

 

以上是关于继续体验sql之数据操作和约束的主要内容,如果未能解决你的问题,请参考以下文章

继续体验mysql之数据库操作

LINQ体验——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

SQL入门经典之键和约束

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

基于约束的SQL攻击

基于约束的SQL攻击