Mysql表结构操作,crud操作

一 表操作
    1>创建表
       1 create table [if not exists] test(id int);
       2 create table test as select * from t;
       3 select id,name into ctabl1 from ctable;--sqlserver支持
    2>修改表
       --修改表名
       ALTER TABLE chartable RENAME TO chartable1
       --修改表 新增列
       ALTER TABLE chartable ADD age INT;   
       --修改表的列类型
       ALTER TABLE chartable MODIFY age VARCHAR(20)
       --修改列名和列类型
      ALTER TABLE chartable CHANGE age age1 DATE;
    3>删除表
       drop table [if exists] test;       
二 表约束
    1> not null
    2> unique
        --在创建表时指定
        DROP TABLE IF EXISTS checktest;
       CREATE TABLE IF NOT EXISTS checktest(
               id INT PRIMARY KEY,
               cardid VARCHAR(18) UNIQUE
       )
       --创建之后指定
       CREATE TABLE IF NOT EXISTS checktest(
               id INT PRIMARY KEY,
               cardid VARCHAR(18) 
       )
       alter table checktest add constraint ui_carid unique(carid)
       --删除唯一约束
       ALTER TABLE checktest DROP INDEX ui_carid
    3> primary key
        DROP TABLE IF EXISTS checktest;
        --在创建表时指定
       CREATE TABLE IF NOT EXISTS checktest(
           id INT PRIMARY KEY
       )
       --创建之后指定
       CREATE TABLE IF NOT EXISTS checktest(
           id INT
       )
       alter table checktest add primary key(id)
       --删除主键约束
       ALTER TABLE checktest DROP PRIMARY KEY
           
    4> check
        --5.5之前不支持check 约束  但是保留了check关键字
    5> foreign key
       --在创建表时指定
       CREATE TABLE arcticle(
           id INT PRIMARY KEY,
           title VARCHAR(20),
           content VARCHAR(20),
           userid INT REFERENCES userinfo(id)    
       )
      --创建之后指定
      alter table arcticle add foreign key(userid)    REFERENCES userinfo(id)    
      --删除外键
      alter table arcticle drop foreign key(userid)
      
    6> auto_increment
           CREATE TABLE userinfo(
             id INT PRIMARY KEY AUTO_INCREMENT,
             NAME VARCHAR(20)
          )
三 表crud    【create,read,update,delete】
   1>插入
      insert into 表名(列1.。。列n) values(值1...值n)
   2>更改
      update 表名  set 列1=值1,。。。。列n=值n  where 条件
   3>删除
      delete from 表名  where 条件     
      truncate table 表名
   4>查询
      select 列名 [as ] 别名 from 表名 where 条件
      --多表联合查询
        /**笛卡尔积连接**/
       SELECT * FROM userinfo,arcticle
       /**内连接**/
        SELECT * FROM userinfo u INNER JOIN arcticle a ON u.id=a.userid
        /**左外连接**/
       SELECT * FROM userinfo u LEFT JOIN arcticle a ON u.id=a.userid
       /**右外连接**/
       SELECT * FROM userinfo u RIGHT JOIN arcticle a ON u.id=a.userid
       //全连接 mysql不支持
       SELECT * FROM userinfo u FULL JOIN  arcticle a ON u.id=a.userid
    --集合的操作    
         INTERSECT 交集
         union all  --不去重复
         union      --去重复
    --分组 排序
       
       --测试表
       CREATE TABLE `userinfo` (
         `id` INT(11) NOT NULL AUTO_INCREMENT,
         `name` VARCHAR(20) COLLATE utf8_bin DEFAULT NULL,
         `grade` INT(11) DEFAULT NULL,
         `score` INT(11) DEFAULT NULL,
         PRIMARY KEY (`id`)
       ) 
       
       CREATE TABLE `arcticle` (
         `id` int(11) NOT NULL AUTO_INCREMENT,
         `title` varchar(20) COLLATE utf8_bin DEFAULT NULL,
         `content` varchar(200) COLLATE utf8_bin DEFAULT NULL,
         `userid` int(11) DEFAULT NULL,
         PRIMARY KEY (`id`),
         KEY `F_USERINFO` (`userid`),
         CONSTRAINT `F_USERINFO` FOREIGN KEY (`userid`) REFERENCES `userinfo` (`id`)
       ) 
       
       /**查询分数最高的用户在哪个班级**/
       SELECT grade,MAX(score) FROM userinfo GROUP BY grade HAVING MAX(score)=(SELECT MAX(score) FROM userinfo) order by grade;     
   --子查询
      --表子查询
      SELECT * FROM (SELECT * FROM userinfo) t
      --列子查询
      SELECT title,(SELECT NAME FROM userinfo WHERE id=a.userid) FROM arcticle a;          
      --条件子查询
      SELECT * FROM arcticle WHERE userid=(SELECT id FROM userinfo WHERE NAME='张三')             
              
原文地址:https://www.cnblogs.com/t0404/p/10291057.html