Day_01 MYSQL(上)

遇到的一些问题:
Q1:如果在MySQL中一个表test中的id字段设为auto_increment插入两条记录后id=2,此时删除一条记录再插入一条变成id自增时跳过了2,如何设置在新插入一条时,id从2开始技术使用.

问题如图:

1.png

解决办法有两个:
法一:插入数据时直接设置好id
法二:使用:mysql>alter table 表名 auto_increment = 2;
可以使新添加一条时,id从2开始,
如果auto_increment=值小于max(id),则id从max(id)+1开始计数.
Q2:关于如何设置date字段的值?
解决办法:update 表名 set date='2014-02-09' where 条件;
注意:在添加date时需要将date的值用单引号括起来!

进去mysql控制台 :
win+r------>cmd------>mysql -u 用户名 -p(回车之后输密码)(mysql -u用户名 -p密码)
查询数据库:show databases;
使用数据库:use database 数据库名;
查询某一个数据库中有哪些表:show create database 数据库名
查询数据库中的表:show tables;
查询表结构::desc 表名;
查询表中的所有数据:select * from 表名;
一丶SQL语言(Structured Query Language):结构化查询语言,可以很方便的存储数据库,以及更新,删除和管理数据库管理系统.
分类:DDL:数据定义语言,主要是用于定义数据库,数据表,列等
关键字:create,drop,alter
DML:数据库操作语言,主要是用来对数据增,删,改的操作
关键字:insert,delete,update
DCL:数据库控制语言,主要是用来设置权限以及创建用户的.
DQL:数据库查询语言,主要是用于查询数据表中的数据
关键字:select,from,where
CURD----->CREATE/UPDATE/READ/DELETE

如果列名是关键字, 则需要用包起来(tab键上面那个),如:`desc` 二丶SQL完成对数据库的操作: 创建数据库: `create database 数据库名;` 修改数据库字符编码: `create database 数据库名 character set 字符集格式; 修改数据库: `alter database 数据库名 character set 制定的码表名;` `//alter database web_01 character set utf8;` 删除数据库: ` `drop database 数据库名;
查询数据库:
show databases;``(查询所有数据库)
创建数据库:
create database 数据库名;
create database 数据库名 character set 字符集格式;
修改数据库:
alter database 数据库名 character set 指定的码表名;
//alter database web_01 character set utf8;
删除数据库:
drop database 数据库名;
查询数据库:
查看所有的数据库:
show databases;
查看某一个数据库(中有哪些表):
show create database 数据库名;
使用数据库:
use 数据库名;

注意:
    数据库的操作是一个不可逆的操作, 执行了就是执行了, 并不能撤销.

三丶SQL完成对数据库表的操作
创建表:
create table 表名(
字段名 字段类型(长度) [约束],
字段名 字段类型(长度) [约束],
字段名 字段类型(长度) [约束]
);
字段类型:
Java MySQL
byte/short/int/long tinyint/smallint/int/long
float/double float/double
char/String char/varchar
char: 长度固定的字符串
varchar: 长度可变的字符串
Date date/time/datetime/timestamp
datetime: 必须手动设置.
timestamp:时间戳, 利用系统当前时间存入.
File BLOB/TEXT(CLOB)
约束:
作用: 保证数据的完整性.
单表操作的约束:
主键约束: primary key //auto_increment 自动增长
唯一约束: unique
非空约束: not null
测试: 创建一个员工表.
create table employee(
eid int,
name varchar(20),
sex varchar(10),
birthday date ,
salary double,
intfo varchar(200)
);

        create table employee(
            eid int primary key auto_increment,
            name varchar(20) unique,
            sex varchar(10) not null,
            birthday date not null,
            salary double not null,
            intfo varchar(200) not null
        );


删除表:
    drop table 表名;

查看当前数据库中所有的数据表:
    show tables;
查看某个表的结构:
    desc 表名;

修改表:                //理解
    添加字段:
        alter table 表名 add 字段名 类型(长度) 约束;
        //alter table employee add image varchar(50) not null;
    修改字段类型长度和约束
        alter table 表名 modify 字段名 类型(长度) 约束;
        //alter table employee modify image varchar(100);
    修改字段名(列名):
        alter table 表名 change 旧字段名 新字段名 类型(长度) 约束;
        //alter table employee change image image2 varchar(200);
    删除字段:
        alter table 表名 drop 字段名;
    修改表名:
        rename table 旧表名 to 新表名;
    修改表的字符集:
        alter table 表名 character set 字符集;
  1. SQL完成对数据库表中记录的操作 //务必掌握
    注意:
    1. 值的个数与字段的个数要一致.
    2. 值的类型与字段的类型要一致.
    3. 值的长度不能超过字段设置的最大长度.
    4. 数字类型的值可以直接写, 其他类型的值要用''号引起来.
插入数据:
    插入部分数据:
        insert into 表名(字段1, 字段2, 字段3...) values(值1, 值2, 值3...);
    插入所有数据:
        insert into 表名 values(值1, 值2, 值3);
    插入多条数据:
        insert into 表名 values(值1, 值2, 值3),(值1, 值2, 值3),(值1, 值2, 值3);

    插入中文数据会出现乱码问题:
        产生问题的原因:
            控制台(windows操作系统)默认用的字符集(码表)是GBK, 而MySQL默认用的码表是UTF-8;
        解决方案:
            方案一:
                1. 找到MySQL安装目录下的my.ini文件,
                2. 将[client]下的default-character-set的值改为: gbk
                    /*
                        [client]

                        port=3306

                        [mysql]

                        default-character-set=gbk
                    */
                3. 然后重新启动MySQL服务.
                
                //services.msc windows执行, 打开本地服务.
            方案二:
                临时设置当前MySQL服务的码表为: gbk.
                //set names gbk;
                //insert into employee(name,sex) values('珍亮','男');
修改数据:
    修改某条记录:
        update 表名 set 字段名=值, 字段名=值 where 条件;
    修改全部记录:
        update 表名 set 字段名=值, 字段名=值;

删除数据:
    删除多条记录:
        delete from 表名;
    删除一条记录:
        delete from 表名 where 条件;
    注意:
        删除的都是表中的一条记录.

    面试题:
        delete from 和 truncate table 之间有什么区别?
            delete from:
                是一条记录一条记录的删除, 属于DML语句.
                //事务作用在DML上的
                /*
                    示例:
                        start transaction;      //开启事务
                        delete from employee;   //删除employee表中的数据
                        select * from employee; //查询employee表中的数据
                        rollback;               //事物回滚
                        select * from employee; //查询employee表中的数据
                */
                
            truncate table:
                是将整个表删除了, 然后重新创建一个与之一样的表, 属于DDL语句.


查询数据:
    基本的查询语句:
        select * from 数据表名;

        select * from 表 where 条件;
    条件:
        1. 比较运算符
            >, <, >=, <=, =, <> 
        2. 逻辑运算符
            and, or, not
        3. 区间的判断
            between 值1 and 值2;
        4. 固定值的判断
            in 多条件查询
        5. 模糊查询
            like 模糊查询

    案例:
        创建学生成绩表:
            create table exam( 
                id int primary key auto_increment,
                name varchar(20),
                chinese int,
                math int,
                english int
            );
        往表中添加几条数据:
            insert into exam values(1,'张三',82,69,90),
            (2,'李四',50,41,62),
            (3,'王五',59,59,59),
            (4,'赵六',98,99,99),
            (5,'田七',96,59,41),
            (6,'王二麻子',60,83,51);

    需求:
        1. 查询英语成绩大于90的学生信息.
        
        2. 查询姓名为张三的学生信息.
        
        3. 查询学生英语成绩不是90分的学生信息.
    
        4. 查询姓王的学生的信息
            like关键字: 模糊查询
            使用_或者%作为占位符, _代表一个字符, %代表多个字符
            //示例: like '%三%';
            
        5. 查询英语成绩是59,62,90分的学生信息.
            in关键字: 放入多个条件值.
            
        6. 查询数学成绩在70-100之间的所有的数据.
            
            

表达式查询:
    1. 查询学生姓名和学生总成绩.
        //select name, chinese + math + english from exam;
    2. 别名查询 使用 as 关键字, as 可以省略
        //select name, (chinese + math + english) as sum from exam;
    3. 查询姓王的学生的总成绩
        //select name, (chinese + math + english) as sum from exam where name like '王%';


排序查询:
    select * from 表名 where 条件 order by 字段 asc/desc;
    
    1. 查询姓名和数学成绩, 按数学成绩排序.
        select name,math from exam order by math; 
    2. 查询姓名和语文成绩, 按语文成绩倒序排序.
        select name,chinese from exam order by chinese desc;
    3. 查询学生成绩, 按数学成绩排序, 如果数学成绩相同, 按英语成绩排序.          //????
        select * from exam order by math asc, chinese desc;
    4. 查询姓王学生信息并按数学排序
        select * from exam where name like '王%' order by math;
        
    
聚合函数:
    count
    sum
    max
    min
    avg
    
    1. 查询成绩表中总共有多少条记录.
        select count(*) from exam;
    2. 查询语文成绩的平均值.
        select avg(chinese) from exam;
    3. 查询语文成绩的最大值.
        select max(chinese) from exam;
    4. 查询英语成绩的最小值.
        select min(english) from exam;
    5. 查询数学成绩的总和.
        select sum(math) from exam;
        
分组统计:
    关键字: group by
    
    案例: 创建产品表
        create table product(
            pid int primary key auto_increment,
            pname varchar(20),
            price int
        );
        
        insert into product values('冰箱',2000),
        ('冰箱',1000),
        ('冰箱',1500),
        ('洗衣机',2000),
        ('电视机',3000),
        ('洗衣机',1000),
        ('电视机',10000),
    
    需求:
        1. 统计每类商品的个数.
            //select pname, count(*) from product group by pname;
        2. 统计每类商品的总金额.
            //select pname, sum(price) from product group by pname;
        3. 统计每类商品的总金额, 并且总金额大于7000
            //select pname, sum(price) from product group by pname having sum(price)>7000;
        
    总结:
        查询语句格式:
            select * from 表名 where 条件 group by 字段 having 条件 order by 字段


记忆:
    在进行更新语句操作的时候, 一定要备份, 一定要备份, 一定要备份.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 1.MySQL数据库 2.SQL语句 第一节课 ###1(MySQL数据库)数据库概念.avi 5...
    码了个农啵阅读 1,171评论 1 16
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,005评论 0 19
  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,697评论 1 57
  • 学习太极,站桩是基础,可每次听到“至少要站半个小时”、“什么都不能做,不能想”,内心就升起一座大山,让我想站却怕站...
    杨伊2017阅读 279评论 0 0
  • 又是五连败。 看着牌友赢钱后毫不掩饰的大笑,数钱时的眉飞色舞;再看看自己,输得面如土色,口袋空空如也,不由...
    灯下看书阅读 277评论 0 0