alter table 表名 rename to 新的表名; -- eg:alter table student rename to stu;
MySQY服务启动
1.win+R输入cmd进入命令行界面,输入命令services.msc 打开服务的窗口
2.使用管理员打开cmd
*net start mysql:启动mysql服务
*net stop mysql:关闭mysql服务
MySQL登录
1.mysql -uroot -proot
*(mysql -uroot -p 回车 输入密码这时候密码是密文显示的)
这个登录的是本地的MySQL用户
2.访问别人的MySQL
mysql -h127.0.0.1(-hip) -uroot -p密码
*-h127.0.0.1(l连接谁敲谁的ip地址)
*-uroot、-p密码(l链接的用户名和密码)
3.mysql --host=ip --user=root --password=链接目标的密码
MySQl退出
1.命令行输入exit、quit
MySQL目录结构
1..MySQL安装目录
配置文件 my.ini
2.MySQL数据目录
默认在C盘目录,点击显示隐藏文件
*C:\ProgramData\MySQL\MySQL Server 5.5\data
*几个概念
*数据库:文件夹
*表:文件
*数据:数据
MySQL数据库表与数据的关系
SQL
1.什么是SQL?
结构化查询语言,其实就是定义了操作所有关系型数据库的规则。每一数据库都可以操作的方式存在不一样的地方,成为“方言”。
2.SQL的通用语法
1..SQL可以单行或多行书写,以分结尾
eg:show databases;
2.用空格和分号来增强语句的可读性
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.三种注释
* 单行注释:-- 注释内容(--后面一定要加空格) 或 # 注释内容(mysql特有的书写方式)
* 多行注释: /*注释*/
3.SQL分类
1.DDL 数据定义语言-->操作数据库和、表(creat,drop,alert等)
2.DML 数据操作语言-->增删改表中数据(insert,delete,update等)
3.DQL 数据查询-->查询表中数据(关键词:select ,where等)
4.DC L 数据控制语言(了解)(关键字:GRANT,RECOKE等)-->授权的
DDL(操作数据库和数据库中的表)
1.操作数据库:CRUD
1.C(creat):创建
*创建数据库:
create database 数据库名称;
*创建数据库,判断不存在再创建:
create database if not exists 数据库名; -- (创建之前查询是否存在数据库,存在创建另一个数据库)
*创建数据库并指定字符集:
create database 数据库名称 character set 字符集合;
*练习: 创建date4数据库,判断是否存在并制定字符集为gbk :
create database if not exists db4 character set gbk;
2.R(Retrieve):查询
*查询数据库的名称:
show datebases ;
*查看某个数据库的字符集:
show create datebase mysql; -- 查询某个数据库的创建
3.U(Update):修改
*修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;
-- eg:alter database db3 character set utf8;
4.D(Delete):删除
*删除数据库
drop database 数据库名称;-- eg:drop database demo1;
*判断数据库是否存在,存在删除
drop database if exists 数据库名称; -- eg:drop database if exists demo01;
5.使用数据库
*查询当前正在使用的数据库名称
select database();
*使用数据库库
use 数据库名称;-- eg:use demo01;
2.操作表
1.C(Create):创建表
1.语法
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3,
...
列名n 数据类型n -- 注意最后一列,不需要加逗号(,)
);
数据库类型:
1.int :整数类型
age int,
2.double:小数类型
score double(5,2), -- 5位的小数,小数点后保存两位
3.date:日期,只包含年月日,yyy-MM-dd
4.datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5.timestamp:时间错类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
*如果将来不给这个自段赋值,或赋值为null,则默认在使用当前的系统时间,来自动赋值
6.varchar:字符串
name varchar(20), -- 姓名最大20个字符 eg:zhangsan varcher(20),(zhangsan 8个字符)
如下为一张学生信息表:
创建表:
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
2.R(Retrieve):查询
*查询数据库中所有表的名称:
show tables;
*查询表结构
desc 表名;-- eg:desc student;
3.U(Update):修改
1.修改表名
alter table 表名 rename to 新的表名; -- eg:alter table student rename to stu;
2. 修改表的字符集
alter table 表名 character set 字符集名称; -- rg:alter table stu character set utf8;
3.添加一列
alter table 表名 add 列名 数据类型; -- eg:alter table stu add sex varchar(10);
4.修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;-- alter table stu change sex gender varchar(20);既改名字也改类型
alter table 表名 modify 列名 新数据类型; -- alter table stu modify sex varchar(10);(只改变数据类型)
5.删除列
alter table 表名 drop 列名; -- alter table stu gender;
4.D(Delete):删除
*删除表
drop table 表名;
*判断表存在删除
drop table if exists 表名;-- eg:drop table if exists stu;
客户端图形化工具:SQLYog
DML:增删改表中数据
1.添加数据
语法:
insert into 表名(列名1,列名2,列名3,...列名n) values(值1,值2,...值n); -- eg:INSERT INTO stu(id,NAME,age) VALUES(1,'张无忌',18);
注意:
1. 列名和值要一一对应。
2.如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...值n); -- eg:insert into stu values(2,'赵敏',17,99.9,null,null);
3.除了数字类型,其他类型需要使用引号引起来(' ')(单双都可以)
2.删除数据
语法:
delete from 表名 [where 条件] ; -- eg:DELETE FROM stu WHERE id=1;
注意 :1.如果不加条件删除表中所有记录
2.如果要删除所有记录
1.delete from 表名; -- 不推荐使用。有多少记录就会执行多少次的删除操作
2.truncate table 表名; -- 先删除表,效率更高 然后再创建一张一张的表。
3.修改数据
语法:
update 表名 set 列名1 = 值1, 列名2 = 值2,...[where 条件]; -- eg:update stu set age = 117 where id = 2;
注意:
1.如果不加任何条件,则会将表中的所有记录全部修改。
eg:update stu set age = 20; -- 将表中所有的age全部改成20
DQL:查询表中的记录
1.语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询
创建学生表
CREATE TABLE student(
id INT,-- 编号
NAME VARCHAR(20),-- 姓名
age INT,-- 年龄
sex VARCHAR(5),-- 性别
address VARCHAR(100),-- 地址
math INT,-- 数学
english INT-- 英语
);
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES
(1,'马云',55,'男','杭州',33,99),
(2,'马化腾',45,'男','深圳',98,65),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'刘青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
1.多个字段的查询
select 字段名1,字段名2,...from 表名;
注意:如果查询所有字段,可以直接使用*来代替字段列表
-- 查询姓名 和 年龄
SELECT
NAME,-- 姓名
age -- 年龄
FROM
student;-- 学生表
-- 查询学生的地址
SELECT address FROM student;
2.去除重复
* distinct
-- 去除重复的结果集
SELECT DISTINCT address FROM student;
-- 查询XX来自哪里
SELECT DISTINCT NAME,address FROM student;
3.计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2);
*表达式1:哪个字段需要判断是否为null
*如果该字段为null后的替代值。
-- 计算 math和english 分数之和
SELECT NAME ,math,english,math + english FROM student;
-- 如果有null 参与的运算,计算结果都为null
select name,math,english,math + ifnull(english,0) from student;
4.起别名
as:as也可以省略
-- 起别名
SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;
3.条件查询
1.where字句后跟条件
2.运算符
*>、<、<=、>=、=、<>
*BETWEEN...AND
*IN(集合)
*LIKE 模糊查询
占位符:
*_:单个任意字符
*%:多个任意字符
*IS NULL
*and 或 &&
*or 或 ||
*not 或 !
-- 查询年龄大于20岁
SELECT * FROM student WHERE age >20;
-- 查询年龄大于等于20岁的
SELECT * FROM student WHERE age >=20;
-- 查询年龄等于20岁
SELECT * FROM student WHERE age =20;
-- 查询年龄不等于20岁
SELECT * FROM student WHERE age !=20;
SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >=20&& age<=30;
SELECT * FROM student WHERE age >=20 AND age<=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;-- 包含20也包含30
-- 查询年龄22岁,19岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
SELECT *FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为null的
SELECT * FROM student WHERE english = NULL;-- 这种写法是错误的 null值不能使用 =(!=)判断
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询班级里姓马的同学有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询第二个字是化的人
SELECT * FROM student WHERE NAME LIKE '_化%';
-- 查询姓名是三个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含马德人
SELECT * FROM student WHERE NAME LIKE '%德%';