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 '马_'; 

 反正基本语法我也记不住,用的时候再说呗!。