MySQL数据库的常用操作

本文详细介绍了MySQL的基本操作,包括数据库和表的创建、删除、查询及更新等。还涉及了表结构的调整方法,如添加、删除列,修改列名和类型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#MySQL
#   显示全部数据库
        SHOW DATABASES;
#   创建数据库
        CREATE DATABASE day19;
#   删除数据库
        drop DATABASE day19;
#   使用数据库
        USE day19;
#   查看有哪些表
        SHOW TABLES;
#   查看表结构
        DESC phones;
------------------------------------------------------------------------------------------------------------------------
#   表结构的增删改查
#       创建表
            CREATE TABLE phones (
            id      INT,
            name    VARCHAR(20),
            price   DOUBLE,
            jieshao VARCHAR(200)
            );
#       删除表
            DROP TABLE phones;
#       查看建表语句
            SHOW CREATE TABLE phones;
#       查看当前的使用的数据库
            SELECT database();
#       修改表的名字
            RENAME TABLE phones TO phone;
#       向表中添加一列(可以有column 也可以没有)
#           alter table 表名 add (column 可有可无) 新列名 类型;
                alter TABLE phone add COLUMN num INT;
                ALTER TABLE phone add sum int;
                desc phone;
#       修改列的名字
#           alter table 表名 change 原列名 新列名 新表名类型;
                ALTER TABLE phone CHANGE sum he int;
#       修改列的类型
#           alter table 表名 modify 列名 新的类型;
                ALTER TABLE phone MODIFY he VARCHAR(20);
#       删除一列
#           alter table 表名 drop 列名;
                ALTER TABLE phone DROP he;
#       修改表的字符集(注意,utf-8 在这里叫做 utf8)
#           alter table 表名  character set 新的编码;
                ALTER TABLE phone character SET gbk;
                show CREATE TABLE phone;
                ALTER TABLE phone character SET utf8;
#   表内容的增删改查
#       新增表内容
#           insert into 表名 values(对应列类型的值,对应列类型的值,对应列类型的值,...);必须全部字段都填写,否则报错
                INSERT INTO phone VALUES (1,'小米',2199,'真的很烫',3);
#               INSERT INTO phone VALUES (2,'小米2',2199,'真的很烫'); 报错
                SELECT * from phone;
#           insert into 表名 (想要添加的对应字段名,想要添加的对应字段名,想要添加的对应字段名),values(对应前面字段名类型的值,对应前面字段名类型的值,对应前面字段名类型的值);必须完全对应
                INSERT INTO phone (id,jieshao,name) VALUES (2,"还是有点烫",'小米2');
#           insert into 表名 (对应列类型的值,对应列类型的值,对应列类型的值,...),(对应列类型的值,对应列类型的值,对应列类型的值,...);一次插入多条数据
                INSERT INTO phone VALUES (3,'小米3',3333,'改进不少',6),(4,'小米4',4288,'可以遥控电视',7);
#       修改内容
#           update 表名 set 字段名=字段值,字段名=字段值;(可以追加where)(今天只有update和设置字符集 语句中有set)
                UPDATE phone SET num=5;
                UPDATE phone SET num=4 WHERE id=1;
#       删除表的内容
#           delete from 表名 where 字段名=;(注意:不写where语句将全部一条一条的删除整张表的数据);
                DELETE FROM phone WHERE name='小米';
                SELECT * FROM phone;
#           truncate 表名; 直接删除表结构,再创建一张新的表
                TRUNCATE phone;
#       查询表(重中之重)
#           查询所有数据(可以加where)
#               select * from 表名;
                    SELECT * FROM phone;
#           查询指定字段(可以加where)
#               select 字段名 (as(可以省略) 别名) from 表名;
                    SELECT price FROM phone;
                    SELECT price AS '价格' FROM phone;
                    SELECT price '价格' FROM phone;
#           条件查询
#               select * from 表名 where 条件
                    select * FROM phone WHERE id=3;
#           连接符:and or not (相当于: & | !);
                    SELECT * FROM phone WHERE id=3 and name='小米3';
                    SELECT * FROM phone WHERE id=1 OR id=2;
                    SELECT * FROM phone WHERE NOT id=1;
#           运算符:> < = >= <= != <>(大于,小于,大于等于,小于等于,不等于,不等于);
                SELECT * FROM phone WHERE price>2000;
                SELECT * FROM phone WHERE price<3000;
                SELECT * FROM phone WHERE price>=3000;
                SELECT * FROM phone WHERE price<=3000;
                SELECT * FROM phone WHERE price!=3000;
                SELECT * FROM phone WHERE price<>3000;
#           特殊条件:字段名 between 1 and 2;相当于where 字段名1>1 and 字段名1<2;
                SELECT * FROM phone WHERE price BETWEEN 3000 AND 5000;
                SELECT * FROM phone WHERE price>3000 AND price<5000;
#           特殊条件:in(1,2);相当于 or
                SELECT * FROM phone WHERE price IN(3333,4288);
                SELECT * FROM phone where price=3333 OR price=4288;
#           null值判断:is null;  (is not null;  not 字段名 is null;)前者效率高
                SELECT * FROM phone WHERE price is NULL ;
                SELECT * FROM phone where price is not NULL ;
                SELECT * FROM phone WHERE NOT price is NULL ;
#       模糊查询
#           select * from 表名 where 字段名 like '%%';百分号代表匹配
                SELECT * FROM phone WHERE price LIKE '4%';
                SELECT * FROM phone WHERE price LIKE '%2%';
#           select * from 表名 where 字段名 like '_(_)';下划线个数表示有多少个字符
                SELECT * FROM phone WHERE jieshao LIKE '___';
#  去除重复   (关键字   distinct)

########################解决dos窗口下乱码问题(重启dos窗口后失效) set names 字符集(gbk);

    排序查询
        select * from 表名 order by 字段名 asc/desc(升序/降序);
            select * from phones order by jiage asc;
            select * from phones order by jiage desc;
    分组查询
        select * from 表名 group by 字段名 [having];(having中可以加条件)
            select * from phones group by pinpai having jiage >5000;
                having where 的区别
                    having:如果有group by 只能在group by 后面使用
                    where 只能在group by 前面使用
                    在 group by having 可以使用统计函数,where在分组中不可以使用统计函数
    聚合查询
        count(),sum(),max(),min(),avg()
            count() 求指定字段的值不为null的列数
            sum()  求指定字段的所有数值的和,如果类型不是数值类型 结果为0
            max() 求指定字段的最大值,类型是字符串类型,那么使用字符串排序运算
            min() 求指定字段的最小值,类型是字符串类型,那么使用字符串排序运算
            avg() 计算指定列的平均值,若果类型不是数值类型 结果为0
    约束
        非空约束+唯一约束=主键约束
            (not null)+(unique)=(primary key) 从某种意义上来说!!! (not null 只有一种添加方式  (字段名 字段类型 not null))
            自增长
            auto_increment 只对数值类型有效
        添加主键约束的4种方式:
            1:create table pk_1(id varchar(20) primary key ,name varchar(20));
            2:create table pk_2(id varchar(20),name varchar(20),primary key (id));
            3:create table pk_3(id varchar(20),name varchar(20),constraint 起个名字 primary key(id));
            4:create table pk_4(id varchar(20),name varchar(20));
                alter table pk_4 add primary key(id);
        删除主键约束
            alter table pk_4 drop primary key;
        删除唯一约束的方法
            alter table drop index 字段名/constraint;

多表操作
    one2many
        分主表,从表
        需要在从表中添加一列能找到指定主表的映射,比如主键
            添加外键的方式:
                1:create table stu(sid varchar(20) primary key ,name varchar(20));
                  create table msg(mid varchar(20) primary key,english varchar(20),chinese varchar(20),math varchar(20),stu_id varchar(20));
                  alter table msg add constraint foreign key (stu_id) references stu(sid);
                2:create table stu(sid varchar(20) primary key ,name varchar(20));
                  create table msg(mid varchar(20) primary key,english varchar(20),chinese varchar(20),math varchar(20),stu_id varchar(20),constraint foreign key(stu_id) reference stu(sid));
        删除/添加内容是,会受到外键的约束,在对主表进行删除操作,需要先把关联的外键处理掉,对从表进行添加操作,需要参照主表关联的列进行添加
    many2many
        两个主表,一个中间表
        分别把两个表的唯一能区分数据的字段添加到中间表中------比较抽象...
            多对多添加约束的方式:
                1:create table teacher(tid varchar(20) primary key,name varchar(20));
                  create table student(sid varchar(20) primary key,name varchar(20));
                  create table zhong(teacher_id varchar(20),student_id varchar(20),foreign key (teacher_id) references teacher(tid),foreign key (student_id) references student(sid));
                2:create table teacher(tid varchar(20) primary key,name varchar(20));
                  create table student(sid varchar(20) primary key,name varchar(20));
                  create table zhong(teacher_id varchar(20),student_id varchar(20));
                  alter table zhong add foreign key (teacher_id) references teacher(tid);
                  alter table zhong add foreign key (student_id) references student(sid);

                注意:在删两个主表的数据时,要保证中间表的引用已经清除掉了!
    联合主键(many2many中可以解决数据重复问题,但是会极大降低程序效率)
        alter table 表名 add primary key(字段一,字段二);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值