zoukankan      html  css  js  c++  java
  • MySQL常用命令

    1、创建/删除数据库
    CREATE/DROP DATABASE DATABASENAME;
    
    2、创建数据表
    CREATE TABLE table_name(
        col_name1, col_type [not null],#不允许为空则not null ,不写则默认可以为空,[]代表可写可不写
        col_name2, col_type [not null],
        col_name3, col_type [not null]
    )
    例:
    create table  t2(
    r1 int not null,
    r2 varchar(5) not null);
    
    3、切换数据表目录
    use tablename;
    
    4、约束
    约束:希望插入数据时做一个检查,比如性别只有男女,其他值无法加入
    约束即是数据的检察官,当 出现不符合标准的数据时 ,就不会插入数据库
    主键约束:保证实体完整性,主键不能重复,不能为空
    如:PRIMARY KEY
    CREATE TABLE USERS(
    USER_QQ VARCHAR(20) NOT NULL PRIMARY KEY,
    USER_NAME  VARCHAR(50) NOT NULL,
    USER_SEX CHAR(2) NOT NULL,
    )
    
    外键约束:一个表上的数据来源于另一个表
    保证引用完整性
    如:表示创建SCORE表,表中的USER_QQ来源于USER表中的USER_QQ列,如果没有则插入失败
    CREATE TABLE SCORES(
        USER_QQ VARCHAR(20) NOT NULL
        REFERENCES USERS(USER_QQ),
        GNO INT NOT NULL,
        SCORE INT NOT NULL
    )
    
    检查约束:保证域完整性,即列上的某个值符合某种格式或者某种范围
    如:要求游戏编号大于0
    CREATEE TABLE GAMES(
        GNO INT NOT NULL CHECK(GNO>0),
        GNAME VARCHAR(50) NOT NULL,
        GTYPE VARCHAR(20) NOT NULL
    )
    
    默认约束:保证域完整性,比如玩家性别默认为男
    CREATE TABLE USERS(
        USER_SEX VARCHAR(2) NOT NULL DEFAULT ''
    )
    
    自增列:保证实体完整
    CREATE TABLE GAMES(
        GNO INT NOT NULL AUTO_INCREMENT,
    )
    
    5、查看表的基本结构
    DESCRIBE/DESC  TABLE_NAME
    
    Field:字段名
    Type:字段类型
    NULL:是否可以为空
    Key:是否编制索引
    Default:默认值
    Extra:附加信息,如自增列
    
    查看表的详细结构,可以查到创建的所有语句
    SHOW CREATE_TABLE TABLE_NAME 加G可以格式化结果
    
    
    6、修改数据表
    
    修改表名
    ALTER TABLE OLD_NAME RENAME TO NEW_NAME
    
    修改字段名
    ALTER TABLE TABLE_NAME
    CHANGE OLD_NAME NEW_NAME NEW_TYPE
    如:
    ALTER TABLE GAMES
    CHANGE GNO GAME_ID VARCHAR(20)
    
    修改字段数据类型
    ALTER TABLE TABLE_NAME
    MODIFY COL_NAME NEW_TYPE
    如:
    ALTER TABLE GAMES
    MODIFY GNO VARCHAR(20)
    
    添加字段
    ALTER TABLE TABLE_NAME
    ADD NEW_COL_NAME NEW_TYPE
    
    删除字段
    ALTER TABLE TABLE_NAME
    DROP COL_NAME
    
    增补主键约束
    ALTER TABLE TABLE_NAME
    ADD CONSTRAINT COL_NAME
    PRIMARY KEY (COL_NAME)
    如:注意约束名,主键 约束pk,外键则为fk
    ALTER TABLE USERS
    ADD CONSTRINT PK_USERS_USERQQ
    PRIMARY KEY(USERQQ)
    
    添加外键约束
    ALTER TABLE F_TABLE
    ADD CONSTRAINT CON_NAME
    FOREIGN KEY(F_COL)REFERENCES M_TABLE(M_COL)
    如:
    ALTER TABLE SCORES
    ADD CONSTRAINT FK_SCORES_GAMES
    FOREIGN KEY(GNO) REFERENCES GAMES(GNO)
    
    添加检查约束
    ALTER TABLE TABLE_NAME
    ADD CONSTRAINT CON_NAME
    CHECK(EXP)
    如:
    ALTER TABLE GAMES
    ADD CONSTRAINT CK_GAMES_GNO
    CHECK(GN0>0)
    
    添加默认值
    ALTER TABLE TABLE_NAME
    ALTER COL_NAME SET DEFAULT VALUE
    如:
    ALTER TABLE USERS
    ALTER USER_SEX SET DEFAULT ''
    
    添加 自增列
    ALTER TABLE TABLE_NAME
    MODIFY COLUMN  COL_NAME ... AUTO_INCREMENT
    如:
    ALTERR TABLE 'GAMES'
    MODIFY COLUMN 'GNO' INT NOT NULL AUTO_INCREMENT
    PRIMARY KEY
    
    7、插入数据
    
    为所有列插入值,列值同数,列值同序
    INSERT [INTO] TABLE_NAME VALUES(V1,V2,V3...)
    如:
    INSERT INTO USERS
    VALUES
    ('2011-01-22','周天','','1985-09-08','13800110022')
    
    INSERT INTO USERS
    VALUES
    ('2011-01-22','周天',DEFAULT,'1985-09-08','13800110022')
    
    为特定列插入值,指定顺序,列值对应
    INSERT [INTO] TABLE_NAME(COL1, COL2...)
    VALUES(V1,V2...)
    如:
    INSERT INTO USERS
    (USER_QQ, USER_NAME, USER_MOBILE)
    VALUES('1545','DDAFG','1585435535654')
    
    一次性插入多条记录
    INSERT [INTO] TABLE_NAME[(COL1,COL2...COLN)]
    VALURS(V11,V12...V1N),(V21,V22...V2N),(V31,V32...V3N)...
    如:
    INSERT INTO USERS
    (USER_QQ, USER_NAME, USER_BIRTHDAY, USER_MOBILE) 
    VALUES
    ('1545','DDAFG','1938-04-25','1585435535654')
    ('1545','DDAFG','1983-04-25','1585435535654')
    
    修改数据
    修改全部数据
    UPDATE TABLE_NAME
    SET{COL_NAME = EXPRESSION}[,...N]
    如:
    UPDATE USERS
    SET USER_SEX = ''
    
    UPDATE SCORES
    SET SCORE = SCORE + 100
    
    8、修改特定数据
    UPDATE TABLE_NAME
    SET{COL_NAME = EXPRESSION}[,...N]
    WHERE CONDITION_EXPRESSION
    如:
    UPDATE USERS
    SET USER_SEX = ''
    WHERE USER_QQ = '12315'
    
    9、删除数据
    
    使用DELETE命令删除数据
    DELETE [FROM] TABLE_NAME
    [WHERE CONDITION_EXPRESSION]
    如:
    DELETE FROM USERS WHERE USER_SEX = ''
    
    使用TRUNCATE TABLE删除表中的全部数据
    TRUNCATE TABLE TABLE_NAME
    
    TRUNCATE TABLE SCORES
    
    
    10、查询
    
    SELECT COL1,COL2,..COLN
    FROM TABLE1,TABLE2...TABLEN
    [WHERE CONDITION] #查询条件
    [GROUP BY GROUP_BY_LIST] #把查询的结果进行分组
    [HAVING CONDITIONS] # 是统计结果作为查询条件
    [ORDER BY ORDER_LIST[ASC|DESC]] #统计结果进行排序
    
    查询表的全部行和列
    SELECT * FROM TABLE
    
    查询表的部分列
    SELECT USER_QQ, USER_NAME FROM USERS
    
    别名的使用
    SELECT USER-QQ AS '玩家QQ',USER_NAME AS '玩家姓名' FROM USERS
    SELECT USER-QQ '玩家QQ',USER_NAME '玩家姓名' FROM USERS #去掉as
    
    DISTINCT查询结果消除重复行
    SELECT DISTINCT USER_QQ FROM SCORES
    
    LIMIT指定结果集中数据的显示范围
    SELECT * FROM USERS LIMIT 2,3 #查询第几条-共显示几条数据
    
    
    
    查询
    普通条件查询
    如:查询qq号为12301的玩家信息
    SELECT * FROM USERS WHERE USER_QQ = '12301'
    如:查询分数也大于2500分的数据
    SELECT * FROM SCORES WHERE SCORE > 2500
    
    如查询游戏编号为1且分数大于4000的分数信息
    SELECT * FROM SCORES WHERE GNO= 1 AND SCORE> 4000
    
    模糊查询 between and
    如:查询分数在2500到3000的分数, 包括边界
    SELECT * FROM SCORES WHERE SCORE >= 2500 AND SCORE <= 3000
    SELECT * FROM SCORES WHERE SCORE BETWEEN 2500 AND 3000
    不在2500与3700之间的
    SELECT * FROM SCORE WHERE SCORE NOT BETWEEN 2500 AND 3700
    
    
    通配符:
    '_' 一个字符
    % 任意长度
    [] 指定范围内
    [^]不在括号中
    如查询所有姓王的玩家,注意要用like
    SELECT * FROM USERS WHERE USER_NAME LIKE '王%'
    
    查询空值,主要要用 IS NULL , IS NOT NULL
    SELECT * FROM USERS WHERE USER_BIRTHDAY IS NULL
    
    
    对查询结果排序
    对单列指定列进行排序,即单列排序,排序依据、排序方式
    如:查询分数表中编号为1的所有分数信息,并按照分数升序进行排序
    SELECT * FROM SCORES WHERE GNO=1 ORDER BY SCORE ASC/DESC
    
    对多列排序:排序依据,排序方式、优先级,注意条件之间的,
    如:查询分数表所有信息,并按照游戏编号的升序和分数的降序进行排序
    SELECT * FROM SCORES ORDER BY GNO ASC, SCORE DESC
    当ORDER BY 后面出现两个条件时,前面的优先级最高
    
    常用的聚合函数
    sum()
    avg()
    min()
    max()
    count()
    
    etc:查询玩家表中一共有多少名玩家信息
    SELECT COUNT(NAME) FROM NAMES
    SELECT COUNT(*) FROM NAME  除非行上所有的列都为空
    
    etc:查询qq号是12301的玩家游戏的总分数
    SELECT SUM(SCORE) FORM SCORE WHERE USER_QQ = '12301'
    
    etc:查询QQ号是12302的玩家的平均分数
    SELECT AVG(SCORE) FROM SCORES WHERE USER_QQ = '12302'
    
    etc:查询qq号是12302的玩家的总分、平均分、和最高分
    SELECT SUM(SCORE) AS '总分', AVG(SCORE) AS '平均分', MAX(SCORE) AS '最高分' FROM SCORES WHERE USER_QQ = '12302'
    
    
    结果集内分组, GROUP BY
    etc:查询每个玩家的总分数、平均分数、最高分数
    
    SELECT USERS, SUM(SCORE) AS '总分数', AVG(SCORE) AS '', MAX(SCORE) AS '' FROM SCORES GROUP BY USERS
    
    筛选分组结果
    在使用GROUP BY 字句时,可用HAVING子句为分组统计进一步设置统计条件,
    HAVING子句是以聚合函数的统计结果为筛选条件。HAVING写在GROUP By之后
    
    查询平均分数大于4000的玩家QQ号 总分数、平均分数
    SELECT USER_QQ, SUM(SCORE) AS '总分数', AVG(SCORE) AS '平均分数' FROM SCORES GROUP BY USER_QQ HAVING AVG(SCORE) > 4000
    
    统计结果也可以作为排序依据
    查询所有用户的平均分数和总分数并按平均分数倒序排列
    SELECT USER_QQ, AVG(SCORE) AS '平均分数', SUM(SCORE) AS '总分数' FROM SCORES GROUP BY USER_QQ ORDER BY AVG(SCORE) DESC
    
    SELECT FROM WHERE GBOUP BY 聚合函数 HAVING ORDER BY
    
    多表连接查询
    分别从三张表中查询分数信息、显示玩家昵称、游戏名称和分数
    
    SELECT USER_NAME AS '昵称', GNAME AS '游戏名称', SCORE AS '分数' FROM USERS, GAMES, SCORES
    WHERE USERS.USER_QQ = SCORE.USER_QQ AND GAMES.GNO = SCORES.GNO
    FROM 后面直接出现多个表名,这种方式即属于内联接,是隐式内联接
    
    显示内联接格式: 速度更快
    SELECT COL_LIST FROM TABLE1 [INNER] JOIN TABLE2 ON TABLE1.COL=TABLE2.COL
    
    SELECT USER_NAME AS '', GNAME AS '', SCORE AS '' FROM SCORES INNER JOIN GAMES ON GAMES.GNO=SCORES.GNO
    INNER JOIN USERS ON SCORES.USER_QQ = USERS.USER_QQ
    
    SELECT USER_NAME '昵称', SUM(SCORE) AS '', AVG(SCORE) AS '' FROM USERS U INNER JOIN SCORES S
    ON S.USERS_QQ = U.USERS_QQ GROUP BY U.USERS_QQ, USER_NAME
    
    
    外连接:做链接的两个表地位不同,有一张表是基础表,基础表数据必须出现,没有null不齐
    左外连接时左表是基础表,右外连接时右表是基础表,先出现的表为左
    SELECT COL_LIST FORM TABLE1 LEFT/RIGHT [OUTER] JOIN TABLE2 ON TABLE1.COL=TABLE2.COL
    
    比如要求查询所有玩家关于5号游戏的分数信息,基础表是玩家表,有的玩家没有玩游戏也要出现
    SELECT USER_NAME AS '', GNO AS '', SCORES AS '' FROM USERS U LEFT JOIN SCORES S ON U.USER_QQ=S.USERS_QQ AND S.GNO = 5
    
    子查询IN, 子查询一般都不写成select * from 
    SELECT * FROM 1111 WHERE NUM IN (SELECT NUM FROM 2222 WHERE NAME = '')
    
    EXISTS关键字,如果后面的成立,则执行外围的语句
    SELECT * FROM SCORES WHERE EXISTS
    (SELECT * FROM USERS WHERE USERS_NAME = 'SUNWUKONG')
    
    联合查询UNION [ALL]将多个结果纵向链接为一体,有ALL关键字可以显示全部数据(即使重复的数据也显示出来)
    SELECT USER_NAME FROM USERS
    UNION [ALL]
    SELECT GAME FROM GAMES
    
    SELECT + 字符串 表示列名
    查询qq号是12301的玩家所有分数并计算总分、平均分,显示到同一结果集中
    SELECT USER_QQ, GNO, SCORE FROM SCORES WHERE USER_QQ = '12301'
    UNION ALL
    SELECT '总分' ' ', SUM(SCORE) FROM SCORES WHERE USER_QQ = '12301'
    UNION ALL
    SELECT '平均分',' ', AVG(SCORE) FROM SCORES WHERE USER_QQ = '12301'
  • 相关阅读:
    逻辑回归---sklearn
    逻辑回归---梯度下降法
    线回与非线回---线性回归标准方程法
    线回与非线回---sklearn--多项式回归
    线回与非线回---sklearn--多元线性回归
    web前端2020/1/20学习笔记
    web前端2020/1/18-2020/1/19学习笔记
    web前端2020/1/17学习笔记
    java2020/1/16学习笔记
    web前端2020/1/16学习笔记
  • 原文地址:https://www.cnblogs.com/themost/p/7788538.html
Copyright © 2011-2022 走看看