zoukankan      html  css  js  c++  java
  • 继续体验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;

  • 相关阅读:
    MongoDB权限验证
    【大型网站开发系列第一篇】——网站结构层次
    php5.4的htmlspecialchars处理中文
    将session值字符串重新生成session
    php支持短标签
    solr suggest+autocomplete实现自动提示
    linux命令
    【技术】【转】字节序问题大端法小端法
    eeePC(易PC)变态测试!(上)
    "挑iPod不问价"就是不懂“性价比”?
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/13098625.html
Copyright © 2011-2022 走看看