java入门踩的坑2 【数据库快速入门】2019年8月11日
今天一大早,五点就醒了,没事干就赶紧把数据库入门的课看了几十分钟 ,敲了敲,果然就困了
倒床上直接睡到了十一点半。
话费不多,废话不多说。直接摆上今天的笔记;
1.安装配置
这就不多说了,网上一大片。
记住本地ip 127.0.0.1 localhost也行
mysql默认端口3306
账户默认 root 密码root
2. 控制台连接数据库
mysql -u用户 -p密码 (u和p后面都没有空格哦!!!!!)
mysql -hIP地址 -u用户 -p密码 (u和p后面都没有空格哦!!!!!)
mysql --host=IP地址 -u用户 -p密码 (u和p后面都没有空格哦!!!!!)
退出exit或quit
装上SQLyog图形化工具——客户端
什么是SQL? Structured Query Language 结构化查询语言
SQL作用
1) 是一种所有关系型数据库的查询规范,不同的数据库都支持。
2) 通用的数据库操作语言,可以用在不同的数据库中。
3) 不同的数据库 SQL 语句有一些区别
SQL语句分类
1) Data Definition Language (DDL 数据定义语言) 如:建库,建表
2) Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
3) Data Query Language(DQL 数据查询语言),如:对表中的查询操作
4) Data Control Language(DCL 数据控制语言),如:对用户权限的设置
3.今天学的需要记住的句子
3.1创建数据库
create database 数据库名字;
create database if not exists 数据库名字;
create database 数据库名字 character set 字符集;
所有语句都是;分号结尾不能忘
字符集 utf-8 没有-直接utf8;
3.2查看创建的数据库
查看所有的额
show create databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;
3.3修改数据库字符集
alter database db3 character set utf8;
3.4删除数据库
drop database db2;
3.5使用数据库
查看正在使用中的数据库
select database();
使用或切换数据库
use 数据库名;
3.6创建表
create table 表名(
字段名 字段类型;
字段名 字段类型;
.........
);
mysql常用类型
int
double
varchar
date
例子:
create table student (
id int, -- 整数
name varchar(20), -- 字符串
birthday date -- 生日,
最后没有逗号
);
4查看表
查看所有表
show tables;
查看表结构
desc 表名;
查看创建表的SQL语句
show create table 表名;
5快速创建一个相同的表
create table 新表 like 旧表;
6删除表
drop table 表名;
判断存在,再删除
drop table if exists 表名;
7修改表结构
添加表列
alter table 表名 add 列名 类型 ;
修改表类型
alter table 表名 modify 列名 新的类型;
alter table 表名change 旧列名 新列名 新类型;
删除列
alter table 表名 drop 列名;
修改表名
alter table 表名 to 新表名;
修改字符集
alter table 表名 character set 字符集;
8插入
所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
不写字段名 INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
插入部分数据 INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男');
insert into student (id,name,age,sex) values (2, '孙悟天', 16, '男');
-- 插入所有列
insert into student values (3, '孙悟饭', 18, '男', '龟仙人洞中');
-- 如果只插入部分列,必须写列名
insert into student values (3, '孙悟饭', 18, '男');
select * from student;
insert的注意事项:
1) 插入的数据应与字段的数据类型相同
2) 数据的大小应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。
3) 在values中列出的数据位置必须与被加入的列的排列位置相对应。在mysql中可以使用value,但不建议使 用,功能与 values 相同。
4) 字符和日期型数据应包含在单引号中。MySQL 中也可以使用双引号做为分隔符。
5) 不指定列或使用 null,表示插入空值。
9查看 MySQL 内部设置的编码
查看包含 character 开头的全局变量
show variables like 'character%';
解决方案 :修改 client、connection、results 的编码为 GBK,保证和 DOS 命令行编码保持一致
10蠕虫复制
将表名 2 中的所有的列复制到表名 1 中
INSERT INTO 表名 1 SELECT * FROM 表名 2;
只复制部分列
INSERT INTO 表名 1(列 1, 列 2) SELECT 列 1, 列 2 FROM student;
11更新表记录
-- 不带条件修改数据,将所有的性别改成女
update student set sex = '女';
-- 带条件修改数据,将id号为2的学生性别改成男update student set sex='男' where id=2;
-- 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京update student set age=26, address='北京' where id=3;
12删除表记录
-- 带条件删除数据,删除id为1的记录
delete from student where id=1;
-- 不带条件删除数据,删除表中的所有数据delete from student;
使用truncate删除表中所有记录
TRUNCATE TABLE 表名;
truncate和delete的区别: truncate 相当于删除表的结构,再创建一张表。
13简单查询
查询所有的学生:
select * from student;
查询 student 表中的 name 和 age 列
select name,age from student;
使用关键字 使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。
-- 使用别名
select name as 姓名,age as 年龄 from student;
-- 表使用别名
select st.name as 姓名,age as 年龄 from student as st ;
14清除重复值
-- 查询学生来至于哪些地方
select address from student;
-- 去掉重复的记录select distinct address from student;
15查询结果参与运算
select * from student;
-- 给所有的数学加 5 分select math+5 from student;
-- 查询 math + english 的和select * from student;
select *,(math+english) as 总成绩 from student;-- as 可以省略
select *,(math+english) 总成绩 from student;
16 条件查询
准备数据 创建一个学生表,包含如下列:
CREATE TABLE student3 (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int, -- 数学
english int -- 英语
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES(1,'马云',55,'男', ' 杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩 ',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港 ',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
-- 查询math分数大于80分的学生
select * from student3 where math>80;
-- 查询english分数小于或等于80分的学生select * from student3 where english <=80;
-- 查询age等于20岁的学生
select * from student3 where age = 20;
-- 查询age不等于20岁的学生,注:不等于有两种写法select * from student3 where age <> 20;
select * from student3 where age != 20;
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
select * from student3 where age>35 and sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)select * from student3 where age>35 or sex='男';
-- 查询 id 是 1 或 3 或 5 的学生select * from student3 where id=1 or id=3 or id=5;
-- 查询id是1或3或5的学生
select * from student3 where id in(1,3,5);
-- 查询id不是1或3或5的学生select * from student3 where id not in(1,3,5);
查询 english 成绩大于等于 75,且小于等于 90 的学生
select * from student3 where english between 75 and 90;
-- 查询姓马的学生
select * from student3 where name like '马%';
select * from student3 where name like '马';
-- 查询姓名中包含'德'字的学生select * from student3 where name like '%德%';
-- 查询姓马,且姓名有两个字的学生select * from student3 where name like '马_';