• 数据库的一些基本命令


    SHOW VARIABLES LIKE 'character%';//查询数据库的编码格式
    CREATE DATABASE itcast; /*创建数据库*/
    DROP DATABASE itcast; /*删除数据库*/
    ALTER DATABASE itcast DEFAULT CHARACTER SET gbk COLLATE gbk_bin;
    USE itcast;
    CREATE TABLE tb_grade( /*创建表*/
    id INT(11),
    NAME VARCHAR(20),
    grade FLOAT
    );
    SHOW TABLES; /*查看数据中所有的数据表*/
    SHOW CREATE TABLE tb_grade; /*查看数据表*/
    DESC _grade;
    ALTER TABLE tb_grade RENAME _grade; /*修改表名*/
    ALTER TABLE _grade CHANGE NAME usename VARCHAR(200); /*修改字段名*/
    ALTER TABLE _grade MODIFY usename CHAR(20); /*修改字段的数据类型*/
    ALTER TABLE _grade ADD age INT(20); /*添加字段*/
    ALTER TABLE _grade DROP age; /*删除字段*/
    ALTER TABLE _grade MODIFY usename CHAR(20) FIRST; /*修改字段的排列位置*/
    ALTER TABLE _grade MODIFY usename CHAR(20) AFTER grade;
    DROP TABLE _grade; /*删除数据表*/

    /* 表的约束 */
    CREATE TABLE example01(
    id INT PRIMARY KEY, /*单字段主键*/
    NAME VARCHAR(20),
    grade FLOAT
    );

    /*在表中将stu_id 和 course_id 两个字段共同作为主键,两个字段组合可以唯一确定一条记录 */
    CREATE TABLE example02(
    stu_id INT,
    course_id INT,
    grade FLOAT,
    PRIMARY KEY(stu_id,course_id) /*多字段主键*/
    );
    /*每个数据表中最多只能有一个主键约束,定义为primary key 的字段不能有重复值且不能为null*/

    CREATE TABLE example04(
    id INT PRIMARY KEY AUTO_INCREMENT, /*设置表的字段值自动增加*/
    NAME VARCHAR(20) NOT NULL, /*非空约束*/
    stu_id INT UNIQUE, /*唯一约束*/
    grade FLOAT DEFAULT 0 /*默认约束*/
    );

    /* 索引 */
    /*普通索引 是由key 或 index 定义的索引*/
    CREATE TABLE t1(
    id INT,
    NAME VARCHAR(20),
    score FLOAT,
    INDEX(id) /*普通索引*/
    );
    EXPLAIN SELECT * FROM t4 WHERE id=1; /*查看索引是否被使用*/

    /*唯一索引*/
    CREATE TABLE t2(
    id INT NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    score FLOAT,
    UNIQUE INDEX unique_id(id ASC) /*在id字段上建立索引名为unique_id的唯一索引 并且 按照升序排列*/
    );

    /*全文索引*/
    CREATE TABLE t3 (
    id INT NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    score FLOAT,
    FULLTEXT INDEX fulltext_name(NAME) /*在name字段建立索引名为fulltext_name的全文索引*/
    )ENGINE=MYISAM;
    /*目前只有MyISAM存储引擎支持全文索引,InnoDB存储引擎还不支持全文索引*/

    /*单列索引 与 多列索引*/
    CREATE TABLE t4(
    id INT NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    score FLOAT,
    INDEX single_name(NAME(20)),/*name字段创建名称为single_name的单列索引,并且长度为20*/
    INDEX multi(id,NAME(20)) /*多列索引*/
    );
    /*注意:在多列索引中,只有查询条件中使用了这些字段中的第一个字段是,多列索引才会被使用*/

    /*空间索引*/
    CREATE TABLE t6(
    SPACE GEOMETRY NOT NULL,
    SPATIAL INDEX sp(SPACE), /*创建空间索引时,所在字段的值不能为空值 而且只能在存储引擎为MyISAM的表中创建*/
    )ENGINE = MYISAM;

    /*方法一:使用create index语句在已经存在的表上创建索引*/
    /*create [unique|fulltext|spatial] index 索引名 on 表名 (字段名[长度] [ASC|DESC])*/
    CREATE TABLE book(
    bookid INT NOT NULL,
    bookname VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    info VARCHAR(255) NULL,
    COMMENT VARCHAR(255) NULL,
    publicyear YEAR NOT NULL
    );
    /*创建普通索引*/
    CREATE INDEX index_id ON book(bookid);
    /*创建唯一索引*/
    CREATE UNIQUE INDEX uniqueidx ON book(bookid);
    /*创建单列索引*/
    CREATE INDEX singleidx ON book(COMMENT);
    /*创建多列索引*/
    CREATE INDEX multiidx ON book(author(20),info(20));
    /*创建全文索引*/
    DROP TABLE book;/*删除表book重新创建book 目前只有MyISAM存储引擎支持全文索引*/
    CREATE TABLE book(
    bookid INT NOT NULL,
    bookname VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    info VARCHAR(255) NULL,
    COMMENT VARCHAR(255) NULL,
    publicyear YEAR NOT NULL
    )ENGINE=MYISAM;
    CREATE FULLTEXT INDEX fulltextidx ON book(info);
    /*创建空间索引*/
    CREATE TABLE t8(
    SPACE GEOMETRY NOT NULL
    )ENGINE=MYISAM;
    CREATE SPATIAL INDEX spatidx ON t7(g);

    /*方法二:使用ALTER TABLE语句在已经存在的表上创建索引*/
    /*alter table 表名 add [unique | fulltext | spatial] index 索引名(字段名(长度) [ASc | DESC])*/
    /*试例略*/

    /*移除索引*/
    /*使用ALTER TAVLE 删除索引*/
    ALTER TABLE 表名 DROP INDEX 索引名
    /*使用DROP INDEX 删除索引*/
    DROP INDEX 索引名 ON 表名

    /* 添加 更新 与删除数据 */
    /*添加数据*/
    USE itcast;
    CREATE TABLE student(
    id INT(4),
    NAME VARCHAR(20) NOT NULL,
    grade FLOAT
    );
    /*向表中添加一条数据 (可以不填字段名但必须对应)(可以指定字段添加数据)*/
    INSERT INTO student(id,NAME,grade)VALUES(1,'zhang',98.5);
    /*INSERT INTO student VALUES(1,'zhang',98.5);*/
    /*insert 的其他用法*/
    /*insert into student set id=5,name='pittle',grade=99;*/
    /*向表中添加多条记录*/
    INSERT INTO student(id,grade)VALUES(1,98.5),(2,90),(3,89);

    /*更新数据*/
    UPDATE 表名 SET 字段名1=值一[,字段名2=值二...][WHERE 条件表达式]
    /*update 更新部分数据*/
    UPDATE student SET NAME='kaola',grade=50 WHERE id = 1;
    /*update 更新全部数据*/
    UPDATE student SET grade=80;

    /*删除数据*/
    DELETE FROM 表名 [WHERE 条件表达式]
    /*使用truncate删除表中所有数据*/
    TRUNCATE [TABLE] 表名
    /*truncate与delete多能实现删除表中所有数据的功能,但是两者有区别*/
    /*1.delete是DML语句,truncate是DDL语句*/
    /*DELETE后面可接条件语句,truncate只能删除所有数据*/
    /*DELETE删除所有数据之后,再添加数据时从删除时该字段的最大值+1,truncate则重新从一开始*/
    DDL data definition language DML data manipulation language
    DDL:数据定义语言,用来维护数据库对象。
    DML:用于增删改表中数据,DML是伴随TCL事务控制的。
    所有的DML操作,需要再执行事务提交语句COMMIT才算真正确认了此操作。
    演示:想testemp中插入一条记录
    INSERT INTO testemp (id,name,gender) VALUES (1,'张三','M');
    COMMIT;

    /* 单表查询 */
    /*select语句*/
    SELECT [DISTINCT] * 字段名1,字段名2....
    FROM 表名
    [WHERE 条件表达式1]
    [GROUP BY 字段名 [HAVING 条件表达式2]]
    [ORDER BY 字段名 [ASC | DESC]]
    [LIMIT [OFFSET] 记录数]
    DROP TABLE student;
    CREATE TABLE student(
    id INT(3) PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20) NOT NULL,
    grade FLOAT,
    gender VARCHAR(10)
    );
    INSERT INTO student(NAME,grade,gender)
    VALUES('songjiang',40,'男'),
    ('wuyong',100,'男'),
    ('qinming',90,'男'),
    ('husanniang',88,'女'),
    ('sunerniang',66,'女'),
    ('wusong',86,'男'),
    ('linchong',92,'男'),
    ('yanqing',90,NULL);
    SELECT * FROM student; /*查询所有字段*/
    SELECT NAME,gender FROM student; /*查询指定字段*/
    /*按条件查询*/
    SELECT * FROM student WHERE NAME = 'wuyong';
    /*带IN关键字查询*/
    SELECT * FROM student WHERE id IN(1,2,3);
    SELECT * FROM student WHERE id NOT IN(1,2,3);
    /*带between and 关键字查询*/
    SELECT * FROM student WHERE id BETWEEN 2 AND 5;
    SELECT * FROM student WHERE id NOT BETWEEN 2 AND 5;
    /*空值查询*/
    SELECT * FROM student WHERE gender IS NULL;
    SELECT * FROM student WHERE gender IS NOT NULL;
    /*带distinct关键字查询*/
    SELECT DISTINCT gender FROM student; /*过滤重复记录的字段*/
    SELECT DISTINCT gender,NAME FROM student; /*distinct作用于多个字段 只有多个字段都相同才是重复记录*/
    /*带LIKE关键字查询*/
    1.百分号(%)通配符(匹配所有)
    SELECT id,NAME FROM student WHERE NAME LIKE 's%';
    SELECT id,NAME FROM student WHERE NAME LIKE 'w%g';
    SELECT id,NAME FROM student WHERE NAME LIKE '%y%';
    2.下划线(_)通配符(一根下划线只匹配单个字符)
    SELECT * FROM student WHERE NAME LIKE '____ing';
    /*带AND的关键字的多条件查询*/
    SELECT * FROM student WHERE id<5 AND gender='女';
    SELECT * FROM student WHERE id IN(1,2,3) AND NAME LIKE '%ng' AND grade < 80;
    /*带OR的关键字的多条件查询*/
    SELECT * FROM student WHERE id < 3 OR gender='女';/*只需要满足任意条件多可以被查询出来*/
    /*OR 和 AND 一起使用 先计算AND 再计算OR*/
    SELECT * FROM student WHERE gender='女' OR gender='男' AND grade=100; /*AND 的优先级高于 OR*/


    /* 高级查询 */
    SELECT COUNT(*) FROM 表名; /*统计记录条数*/
    SELECT SUM(字段名) FROM 表名; /*求表中某个字段的总和*/
    SELECT AVG(字段名) FROM 表名; /*求表中某个字段的平均值*/
    SELECT MAX(字段名) FROM 表名; /*求表中某个字段的最大值*/
    SELECT MIN(字段名) FROM 表名; /*求表中某个字段的最小值*/
    /*对查询结果排序*/
    SELECT * FROM student ORDER BY grade; /* 默认排序ASC */
    SELECT * FROM student ORDER BY gender ASC,grade DESC; /*此种情况先按gender升序,再按grade降序排列*/

    /*分组查询*/
    SELECT * FROM student GROUP BY gender;/*按照男、女、null分组只显示每个分组中的一条数据*/
    /*GROUNP BY 和聚合函数一起使用*/
    SELECT COUNT(*),gender FROM student GROUP BY gender;/*可以统计每个分组的个数*/
    /*GROUNP BY 和 HAVING关键字一起使用*/
    /*HAVING与WHERE关键字的作用相同 区别在于 HAVING可以接聚合函数 WHERE不能*/
    SELECT SUM(grade),gender FROM student GROUP BY gender HAVING SUM(grade) < 300;
    /*使用LIMIT限制查询结果的数量*/
    SELECT * FROM student LIMIT 4; /* 查询表中前4条数据 只传一个参数偏移量为0的记录数*/
    SELECT * FROM student LIMIT 4,4; /*limit 后面可以跟两个参数,第一参数表示偏移量,第二个参数表示记录数*/

    /* 为表和字段取别名 */
    SELECT * FROM 表名 [AS] 别名; /*为表取别名*/
    SELECT * form student s;
    SELECT 字段名 [AS] 别名,字段名 [AS] 别名 FROM student; /*为字段取别名*/
    SELECT NAME n,gender g FROM student;

    /* 多表操作 */
    DROP TABLE student;
    CREATE TABLE grade(
    id INT(4) NOT NULL PRIMARY KEY,
    NAME VARCHAR(36)
    );
    CREATE TABLE stu(
    sid INT(4) NOT NULL PRIMARY KEY,
    sname VARCHAR(36),
    gid INT(4) NULL
    );
    /*为表添加外键约束(注意:建立外键的表必须是InnoDB型,mysql中只有InnoDB类型的表才支持外键)*/
    /*alter table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名)*/
    ALTER TABLE stu ADD CONSTRAINT FK_ID FOREIGN KEY(gid) REFERENCES grade(id); /*FK_ID为外键名*/
    /*删除外键约束*/
    ALTER TABLE stu DROP FOREIGN KEY FK_ID;
    DESC stu;

    /* 操作关联表 */
    INSERT INTO grade(id,NAME)VALUES(1,'软件一班'),(2,'软件二班') ;
    INSERT INTO stu VALUES(1,'王红',1),
    (2,'李强',1),
    (3,'赵四',2),
    (4,'郝娟',2);
    SELECT * FROM grade WHERE NAME = '软件一班';
    DELETE FROM stu WHERE sname = '王红';
    DELETE FROM grade WHERE id = 2;
    /*两个具有关联关系的表中删除数据时,一定要先删除从表的数据,然后再删除主表数据,否则会报错*/
    /*但是我刚刚试了,也可以先删除主表没有报错*/


    /* 连接查询 */
    /* 交叉连接 ---实际开发中这种业务很少见*/
    SELECT * FROM 表1 CROSS JOIN 表2
    CREATE TABLE department(
    did INT(4) NOT NULL PRIMARY KEY,
    dname VARCHAR(36)
    );
    CREATE TABLE employee(
    id INT(4) NOT NULL PRIMARY KEY,
    NAME VARCHAR(36),
    age INT(2),
    did INT(4) NOT NULL
    );
    INSERT INTO department VALUES(1,'网络部'),(2,'媒体部'),(3,'研发部'),(5,'人事部');
    INSERT INTO employee VALUES(1,'王红',20,1),(2,'李强',22,1),(3,'赵四',20,2),(4,'郝娟',20,4);
    /* 查询的结果为 用第一个表中的所有数据对应第二个表中的每一条数据*/
    SELECT * FROM department CROSS JOIN employee;

    /* 内连接 */
    /*使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组成新的记录、
    只有满足条件的记录才能出现在查询结果中*/
    SELECT 查询字段 FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段 = 表2.关系字段
    SELECT employee.name,department.dname FROM department JOIN employee ON department.did = employee.did;
    /* 子连接 */
    /*在一个连接查询中,涉及的两个表是同一个表,这种查询称为自连接查询
    自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一个表,但逻辑上分为两个表*/
    SELECT p1.*,p2.* FROM employee p1 JOIN employee p2 ON p1.did = p2.did WHERE p2.name = '王红';

    /* 外连接 */
    SELECT 所查字段 FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 表1.关系字段 = 表2.关系字段 WHERE 条件
    /* LEFT JOIN
    返回左表中所有记录和右表中满足条件的记录
    */
    SELECT department.did,department.dname,employee.name FROM department LEFT JOIN employee
    ON department.did = employee.did;
    /* RIGHT JOIN
    返回右表中所有记录和左表中满足条件的记录
    */
    SELECT department.did,department.dname,employee.name FROM department RIGHT JOIN employee
    ON department.did = employee.did;

    /* 复合条件查询 */
    SELECT employee.name,employee.age,department.dname FROM department
    JOIN employee ON department.did = employee.did ORDER BY age;

    /*带 IN 关键字的子查询 */
    SELECT * FROM department WHERE did IN(SELECT did FROM employee WHERE age = 20);
    SELECT * FROM department WHERE did NOT IN(SELECT did FROM employee WHERE age = 20);
    /*带 EXISTS 关键字的子查询 */
    /*只有当字查询结果有值时 才进行外层查询*/
    SELECT * FROM department WHERE did EXISTS(SELECT did FROM employee WHERE age > 21);
    /*带 ANY 关键字的子查询 和 带 ALL 关键字的子查询*/
    /*在子查询的所有结果中选最小(大)的一个值与外层查询的值做比较,只要大于子查询结果中的最小(大)值就满足条件*/
    SELECT * FROM department WHERE did > ANY(SELECT did FROM employee);
    SELECT * FROM department WHERE did > ANY(SELECT did FROM employee);
    /*带比较运算符的子查询 '<' '<=' '!=' */


    //事务与存储过程
    启动mysql数据库:在出来的DOS命令窗口中输入 net start mysql,或者使用快捷键Windows键(在键盘上有个Windows标志的按键)+ R直接输入net start mysql后回车。
    或者直接右键window标志的按钮,然后点击运行

    dos下登录mysql
    H:wampinmysqlmysql5.7.21in>mysql -h localhost -u root -p
    在DOS命令窗口输入 mysql -hlocalhost -uroot -p回车 进入mysql数据库,
    其中-h表示服务器名,localhost表示本地;
    -u为数据库用户名,
    root是mysql默认用户名;
    -p为密码,如果设置了密码,可直接在-p后链接输入,如:-p123456,用户没有设置密码,
    显示Enter password时,直接回车即可。
    注意,如果你的mysql没有安装在C盘下,你需要先使用DOS命令进入mysql的安装目录下的bin目录中。以我的电脑为例,方法如下:输入D:进入D盘,在输入cd D:ToolsMySQL5.5.25in进入到mysql的bin目录下才可以输入 mysql -hlocalhost -uroot -p

  • 相关阅读:
    MySQL轻量级监测工具—doDBA
    MySQL构建百万级数据
    MySQL备份与恢复—xtrabackup
    MySQL8.0.15二进制包安装
    「考试」省选51
    「总结」二次剩余
    「考试」省选50
    「总结」$pdf$课:$dp2$
    「考试」省选49
    「考试」省选48
  • 原文地址:https://www.cnblogs.com/pittle-z/p/11743160.html
Copyright © 2020-2023  润新知