MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作):
    a.创建2张表
    create table userinfo(nid int not null auto_increment primary key,
        name varchar(10),
        age int,
        part_nid int
    )engine=innodb default charset=utf8;

    create table part(
        nid int not null auto_increment primary key,
        caption varchar(20)
    )engine=innodb default charset=utf8;

    添加一些数据,创建一个中间表约束part_nid和part表,这就是外键
                    mysql> select * from userinfo;
                +-----+------+------+----------+
                | nid | name | age  | part_nid |
                +-----+------+------+----------+
                |   1 | h    |   19 |        2 |
                |   2 | hh   |   19 |        2 |
                |   3 | hhh  |   19 |        2 |
                +-----+------+------+----------+
                3 rows in set (0.00 sec)

                mysql> alter table userinfo add constraint fk_u_p foreign key userinfo(part_nid) references part(nid);
                Query OK, 3 rows affected (0.88 sec)
                Records: 3  Duplicates: 0  Warnings: 0

                然后我们在进行数据的插入,这时候由于约束条件的存在,所以我们就无法进行插入part_nid为100的数据
                    mysql> insert into userinfo(name,age,part_nid) values('b',19,100);
                    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`userinfo`, CONSTRAINT `fk_u_p` FOREIGN KEY (`part_nid`) REFERENCES `part` (`nid`))
                    mysql>

    b.外键foreign key ,一对多(在创建表之前就知道有关联的列和表)
      总结:
            2张表的建立约束
            --约束
    c.修改表(列的增删查改)
            添加列:alter table 表名 add 列名 类型;
            删除列:alter table 表名 drop column 列名;
            修改列:
                    alter table 表名 modify column 列名 类型;--类型
                    alter table 表名 change 原列名 新列名 类型;--列名,类型
            添加主键:
                    alter table 表名 add primary key(列名);
            删除主键:
                    alter table 表名 drop primary key;
                    alter table 表名 modify 列名 int,drop primary key;
            添加外键:
                    alter table 从表 add constraint 外键名字(形如:fk_从表_主表) foreign key 从表(外键字段)references 主表(主键字段);
             删除外键:
                    alter table 表名 drop foreign key 外键名称;
    d.基本的数据类型:数值,时间和字符串
            数值:
                bit 二进制
                tinyint
                smallint
                int
                bigint
                    --范围不一样

                decimal:十进制小数,精确的
                FLOAT
                DOUBLE

            字符串:
                    char(定长)
                        create table tb13(n char(7))
                            不管怎样都要占用7个字符的空间,查找速度快,浪费内存空间
                    varchar(变长)
                            varchar是最大占用7个字符的空间,查找速度慢,节省空间
                    text
                    mediumtext
                    longtext
            二进制数据:
                    TineyBlob Blob MediumBlob LongBlob
                    #上传文件
                    #强制二进制文件
                    #将上传的文件保存在硬盘
            时间:
                DATE:   YYYY--MM--DD
                TIME:   HH:MM:SS
                YEAR:   YYYY
                DATETIME:   YYYY--MM--DD HH:MM:SS
                TIMESTAMP:  YYYMMDD HHMMSS

            enum:
表级别的操作*****
        select * from tb1;
        #增
            insert into biao2(name,age) values('bob',234);#可以插一条数据,
            insert into biao2(name,age) values('lizebo',26),('eric',30);#可以插多条
            insert into biao1(name,age) select name,age form biao2;#可以把另外一个表中的内容插入到这个表中
        #删
            delete from biao2;#全清空
            delete from biao2 where id=1 and name='alex';#按条件删除
        #查
            select * from 表;#查看表的全部内容,select *这种操作效率比较低,最好的方式就是写一遍,效率高。
            select * from 表 where id>1;#按条件查询
            select nid,name,gender as gg from 表 where id>1;
        #改(跟新)
            update 表 set name='alex' where id>1;#跟新设置某项内容


        #其他
            a.条件
                select * from 表 where id>1 and name != 'alizbeo' and nid=12;
                select * from 表 where id between 5 and 16;#在...之间的数据
                select * from 表 where id in (11,22,33);#是否在这个元组中
                select * from 表 where id not in (22,33,44);
                select * from 表 where id in (select * from biao2);
            b.通配符(模糊搜索)
                select * from 表 where name like 'alex%';#alex开头的所有(多个字符串)
                select * from 表 where name like 'ale_';#_表示ale开头的所有(一个字符)
            c.分页
                select * from 表 limit 5;#前5行
                select * from 表 limit 0,4;#从0行开始取4行
                select * from 表 limit 4 offset 0;#从0开始取4行,这个比较常用
            d.排序
                select * from 表 order by 列 asc;#根据‘列’从小到大排序
                select * from 表 order by 列 desc;#根据‘列’从大到小排序
                select * from 表 order by 列1 desc,列2 asc;#根据‘列1’从小打到排序,如果相同则按列2从小到大排序
            e.分组(重要)
                select num form 表 group by num;
                select num,nid from 表 group by num,nid;
                select num,nid from 表 where nid>10 group by num,nid order nid desc;
                select num,nid ,conut(*),sum(score),max(score),min(score) form 表 group by num,nid;

                当我们对聚合条件进行查询时候,我们需要使用having
                select num from 表 group by num having max(id)>10;
                特别的:group by 必须在where 之后,order by之前
                    列子:我们有这样的一个userinfo表:
                         mysql> select * from userinfo;
                                +-----+--------+------+----------+
                                | nid | name   | age  | part_nid |
                                +-----+--------+------+----------+
                                |   1 | h      |   19 |        2 |
                                |   2 | hh     |   19 |        2 |
                                |   3 | hhh    |   19 |        2 |
                                |   4 | eirc   |   23 |        1 |
                                |   5 | lizebo |   23 |        1 |
                                |   6 | bobli  |   24 |        1 |
                                |   7 | jim    |   21 |        3 |
                                |   8 | jams   |   22 |        3 |
                                +-----+--------+------+----------+
                         我们需要进行分组查询,
                                mysql> select part_nid, min(nid),max(nid),count(nid) from userinfo group by part_nid;
                                    +----------+----------+----------+------------+
                                    | part_nid | min(nid) | max(nid) | count(nid) |
                                    +----------+----------+----------+------------+
                                    |        1 |        4 |        6 |          3 |
                                    |        2 |        1 |        3 |          3 |
                                    |        3 |        7 |        8 |          2 |
                                    +----------+----------+----------+------------+
                                    3 rows in set (0.00 sec)
                                    这里的part_nid就是把相同的nid分成了3类,1,2,3类
                                    min(nid)==最小的nid,max(nid)==最大的nid,count(nid)==总数nid
            f.联合
                组合,自动处理组合
                select nid from 表 union select nid from 表2;#这是去重数据的
                select nid from 表 union all select nid from 表2;#这是去重的
            g.连表操作
                第一种连表操作:
                      如果有一张userinfo和part表,并且这2张表式通过外键关联的,我们要查询这2张表中所有数据
                                    mysql> select * from userinfo;
                                    +-----+--------+------+----------+
                                    | nid | name   | age  | part_nid |
                                    +-----+--------+------+----------+
                                    |   1 | h      |   19 |        2 |
                                    |   2 | hh     |   19 |        2 |
                                    |   3 | hhh    |   19 |        2 |
                                    |   4 | eirc   |   23 |        1 |
                                    |   5 | lizebo |   23 |        1 |
                                    |   6 | bobli  |   24 |        1 |
                                    |   7 | jim    |   21 |        3 |
                                    |   8 | jams   |   22 |        3 |
                                    +-----+--------+------+----------+
                                    8 rows in set (0.00 sec)

                                    mysql> select * from part;
                                    +-----+---------+
                                    | nid | caption |
                                    +-----+---------+
                                    |   1 | IT      |
                                    |   2 | TI      |
                                    |   3 | SA      |
                                    |   4 | DEV     |
                                    +-----+---------+
                                    4 rows in set (0.00 sec)
                      如果我们这样查询连表会产生笛卡儿积,表1中的每条数据都会到表2中进行查询4次。
                                    mysql> select name,age,part_nid from userinfo,part;
                                            +--------+------+----------+
                                            | name   | age  | part_nid |
                                            +--------+------+----------+
                                            | h      |   19 |        2 |
                                            | h      |   19 |        2 |
                                            | h      |   19 |        2 |
                                            | h      |   19 |        2 |
                                            | hh     |   19 |        2 |
                                            | hh     |   19 |        2 |
                                            | hh     |   19 |        2 |
                                            | hh     |   19 |        2 |
                                            | hhh    |   19 |        2 |
                                            | hhh    |   19 |        2 |
                                            | hhh    |   19 |        2 |
                                            | hhh    |   19 |        2 |
                                            | eirc   |   23 |        1 |
                                            | eirc   |   23 |        1 |
                                            | eirc   |   23 |        1 |
                                            | eirc   |   23 |        1 |
                                            | lizebo |   23 |        1 |
                                            | lizebo |   23 |        1 |
                                            | lizebo |   23 |        1 |
                                            | lizebo |   23 |        1 |
                                            | bobli  |   24 |        1 |
                                            | bobli  |   24 |        1 |
                                            | bobli  |   24 |        1 |
                                            | bobli  |   24 |        1 |
                                            | jim    |   21 |        3 |
                                            | jim    |   21 |        3 |
                                            | jim    |   21 |        3 |
                                            | jim    |   21 |        3 |
                                            | jams   |   22 |        3 |
                                            | jams   |   22 |        3 |
                                            | jams   |   22 |        3 |
                                            | jams   |   22 |        3 |
                                            +--------+------+----------+
                                            32 rows in set (0.00 sec)
                      消除笛卡儿积:
                            第一种方式:
                                    mysql> select name,age,part_nid from userinfo,part where userinfo.part_nid=part.nid;
                                            +--------+------+----------+
                                            | name   | age  | part_nid |
                                            +--------+------+----------+
                                            | h      |   19 |        2 |
                                            | hh     |   19 |        2 |
                                            | hhh    |   19 |        2 |
                                            | eirc   |   23 |        1 |
                                            | lizebo |   23 |        1 |
                                            | bobli  |   24 |        1 |
                                            | jim    |   21 |        3 |
                                            | jams   |   22 |        3 |
                                            +--------+------+----------+
                                            8 rows in set (0.06 sec)
                                    其实就是按关联条件查询!
                            第二种方式:
                                    mysql> select * from userinfo left join part on userinfo.part_nid=part.nid;
                                            +-----+--------+------+----------+------+---------+
                                            | nid | name   | age  | part_nid | nid  | caption |
                                            +-----+--------+------+----------+------+---------+
                                            |   4 | eirc   |   23 |        1 |    1 | IT      |
                                            |   5 | lizebo |   23 |        1 |    1 | IT      |
                                            |   6 | bobli  |   24 |        1 |    1 | IT      |
                                            |   1 | h      |   19 |        2 |    2 | TI      |
                                            |   2 | hh     |   19 |        2 |    2 | TI      |
                                            |   3 | hhh    |   19 |        2 |    2 | TI      |
                                            |   7 | jim    |   21 |        3 |    3 | SA      |
                                            |   8 | jams   |   22 |        3 |    3 | SA      |
                                            +-----+--------+------+----------+------+---------+
                                            8 rows in set (0.00 sec)
                                            可以用inner join on其实对left join on进行了一个null的过滤。