Mysql入门
一、数据库概述
1、为什么要用数据库?
程序中的数据是在内存中,一旦程序关了,数据就没了,没法永久保存。
所以我们需要把数据“持久化”。
我们虽然学过IO流和File类,可以实现数据的持久化,但是用普通的文件保存的话
- 数据的格式
- 检索、管理(增加、修改、删除)等操作及其不方便
因此我们要用特殊的文件来存储我们的数据,这个特殊的文件就是数据库。
数据库就是有组织/有结构的方式来存储我们的数据。
结论:
- 数据“持久化”。
- 有组织/有结构的方式来存储我们的数据,更方便增、删、改、查...
2、什么是数据库
- DB:Database,数据库->数据仓库,存储数据用的,并有结构的存储。
- DBMS:Database Management System 数据库管理系统,
- mysql,oracle,sql server, access, redis,mango db...
- SQL:Structured Query Language 结构化查询语言
3、安装DBMS
4、mysql属于关系型数据库
二维(行、列)表格的形式
mysql的DBMS系统中会有很多库DB,
但是一个DB数据库中又会有很多张表格table,
每一个表格中会有很多的列column和行record。
二、卸载
1、最好,建议,先检查mysql的服务是否正在运行..
- (1)方式一:
启动任务管理-->服务-->mysql服务
DBMS是一个网络应用程序,它属于TCP/IP协议的网络应用程序,并且它是一个服务器端。
- (2)方式二
我的电脑(计算机)-->右键-->管理-->服务
2、卸载
- 方式一:控制面板
- 方式二:电脑管家或360安全卫士
- 方式三:用安装程序自带的卸载程序
3、清理遗留文件
- 找到之前的安装目录,清理
- 如果你是默认安装的,要注意,mysql的默认的数据目录,是在一个隐藏文件夹中:
C:ProgramDataMySQL
4、清理注册表
如何打开注册表编辑器:在系统的搜索框中输入regedit
如果前两步做了,再次安装还是失败,那么可以清理注册表
- 1:HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesEventlogApplicationMySQL服务 目录删除
- 2:HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesMySQL服务 目录删除
- 3:HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesEventlogApplicationMySQL服务 目录删除
- 4:HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesMySQL服务 目录删除
- 5:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationMySQL服务目录删除
- 6:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMySQL服务删除
- 注册表中的ControlSet001,ControlSet002,不一定是001和002,可能是ControlSet005、006之类
三、安装
四、使用
注意:我们刚才安装的mysql是服务器端的程序。
我们使用时要分为两步:
1、启动服务器
检查服务是否已启动
任务管理器-->服务-->mysql5.5
2、用客户端去连接服务器端
客户端的种类有很多,常见的:
- 命令行客户端
- Java程序
- 可视化工具,SQLyog,Navicat,Mysql admin....
3、使用命令行客户端
- 确定环境变量正确
- 可以使用mysql命令
- mysql命令的格式:
mysql -h localhost -P 3306 -u root -pEnter password:密码
说明:
- -h,-P,-u后面可以有空格也可以没有空格,但是最后-p后面不要加空格
- 如果你是默认连接本机localhost,那么可以省略-h localhost
- 如果你是默认用3306端口号,那么可以省略-P 3306
五、演示几个SQL语句
1. 查看当前的DBMS系统中都有哪些数据库?
show databases;
2. 查看某个数据库中都有什么表格?
show tables;mysql> show tables;
ERROR 1046 (3D000): No database selected
方式有两种:
方式一:
show tables from 数据库名;mysql> show tables from test;
Empty set (0.00 sec)
方式二:
use 数据库名;show tables;
3. 查看某张表的数据
方式一:
select * from mysql.user;
方式二:
use 数据库名;select * from user;
4. 创建一个表格
create table test.stu( id int,
name varchar(20),
age int
);
5. 添加记录
insert into test.stu values(1,"张三",23);mysql> insert into test.stu values(1,"张三",23);
ERROR 1366 (HY000): Incorrect string value: "xD5xC5xC8xFD" for column "name" at row 1
因为客户端是GBK,而服务器端认为我当前的客户端是UTF-8。
可以通过如下的语句,告知服务器当前的客户端是GBK。
set names gbk;
六、MySQL数据类型
1、整型
- Java:byte,short,int,long
- mysql:
- tinyint byte 1个字节 -128~127, unsigned 0~255
- smallint short 2个字节
- mediumint 3个字节
- int 4个字节
- bigint long 8个字节
例如:
- id int(8) 等价于 int(11)
- int(M):这个M是指宽度,如果单独使用(M)是没有意义,必须结合zerofill unsigned
- id int(8) zerofill unsigned: 1 ->00000001
2、浮点型
Java:float,double
mysql:float,double
mysql中的float和double可以指定宽度和精度
double(M,D),例如:double(5,2) 存储范围是-999.99~999.99
- M是一共有几位,D表示小数点后有几位
double(M,D) unsigned ,例如:double(5,2) unsigned 存储范围:0~999.99
3、定点型
- Java:BigDecimal,BigInteger
- mysql:DECIMAL和NUMERIC 都是可以表示小数
4、日期时间类型
Java:java.sql.Date,java.sql.Time,java.sql.Timestamp
mysql:date,time,timestamp,datetime,year
- date:日期
- time:时间
- timestamp,datetime:日期加时间
- year:只有年份
timestamp,datetime:
- timestamp底层是使用毫秒表示,可以区分时区的(同一个毫秒值,在不同的时区,显示的结果是适用当前时区)
- 范围:1970 ... ~ 2038....
- datetime是日期和时分秒表示,不区分时区,什么值就是什么值
- 范围:1000....~ 9999....
- timestamp底层是使用毫秒表示,可以区分时区的(同一个毫秒值,在不同的时区,显示的结果是适用当前时区)
5、字符串类型
Java中分为字符类型char和字符串类型String
Mysql没有字符类型,都是字符串类型
- char:也是字符串类型
- varchar:也是字符串类型,如果是varchar,使用时,必须指定varchar(M)
- text:也是字符串类型
char或char(1)表示存1个字符,如果char(M)存储M个字符
char和varchar的区别:
- char一个是定长字符串,例如:char(8),"尚" 用"u0000"补全8位,char的读写速度快
- varchar一个是变长字符串 ,例如:varchar(8),"尚" 实际占尚这个字和这个字的字节数,varchar读写速度慢,节省空间
- 例如是UTF-8 占3个字节 + 1个字节(存3这个数字)
6、其他类型
- xxxbit
- xxxblob:二进制类型 可以存储二维码,小头像
- 枚举类型:预定义几个值,从中选一个
- 集合类型:预定义几个值,从中选多个
7、特殊值:null
- 在Java中,只有引用数据类型才能赋值为null
- 要判断null值, if(变量 == null) 或 if(变量 !=null)
- null值不能用来计算,用来计算是要报错
- 在MySQL中,所有类型都可以赋值为null
- 要判断null值, is null 或 is not null
- null值用来计算不会报错,但是结果都是null
- SUM 函数会过滤null值
七、SQL规范和规则
Structure Query Language,结构化查询语言
1、规范
- mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写
show databases;show DataBASES;
SHOW DATABASES;
- 值,除了数值型,字符串型和日期时间类型使用单引号("")
- 列/字段别名,尽量使用双引号(""),而且不建议省略as
- 所有标点符号使用英文状态下的半角输入方式
- 必须保证所有(),单引号,双引号是成对结束的
- 可以使用(1)#单行注释 (2)--空格单行注释 (3)/* 多行注释 */
2、规则
- 必须只能包含 A–Z, a–z, 0–9, _共63个字符
- 长度不宜过长
- 不能包含空格
- 不要重名
例如:
- 同一张表,字段不能同名,不同的表,字段可以重名
- 同一个库,表不能重名,不同的库,表可以重名
- 同一个DBMS中,库不能同名,不同的DBMS系统中,库可以重名
- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突
- 如果某个字段在不同的表中,表示的意思是一样的,那么数据类型必须相同
例如:
- 员工表:
id intname varchar(20)
did int #所在的部门编号
- 部门表:
id int #部门编号dname varchar(50)
八、SQL-DML
- DDL:数据定义语言,定义库、表结构用的
- DML:数据操作语言,增、删、改、查
- DCL:数据控制语言,权限、事务等控制语句
(一)DDL
1、操作数据库的语句
(1)查看当前DBMS中的所有数据库
show databases;
(2)创建一个数据库
create database 数据库名;
(3)删除一个数据库
drop database 数据库名;
(4)使用,指定使用哪个数据库
use 数据库名;
有了这句后,下面的sql都是默认针对这个数据库的操作。
2、操作表格的语句
(1)查看某个库的所有表格
show tables; #必须前面有use 数据库名;的语句 否则报no database select的错误show tables from 数据库名;
(2)创建表格:基本版:
create table 【数据库名.】表名称( 字段名1 数据类型,
字段名2 数据类型,
字段名2 数据类型,
....
);
- create table 【数据库名.】表名称(字段名1 数据类型,字段名2 数据类型,字段名2 数据类型,....);
- 注意:最后一个字段名的数据类型后面就不用加,
例如:
create table employee( id int,
name varchar(20),
age int,
salary double,
gender char,
birthday date
);
(3)查看表结构
desc 表名称;
(4)修改表结构:增加一列
- alter table 表名称 add 字段名 数据类型 【after 字段名/ first】;
例如:
alter table employee add tel char(11);alter table employee add tel char(11) after name;
(5)修改表结构:删除一列
- alter table 表名称 drop 字段名;
例如:
alter table employee drop tel;
(6)修改表结构:修改列的类型,位置等
- alter table 表名称 modify 字段名 数据类型 【after 字段名/ first】;
例如:
alter table employee modify gender char(2) after age;
(7)修改表结构:修改列的名称
- alter table 表名称 change 旧字段名 新的字段名 数据类型 【after 字段名/ first】;
例如:
alter table employee change gender sex char(2) after age;
(8)修改表名称
- alter table 表名称 rename to 新名称;
例如:
alter table employee rename to emp;
(9)删除整张表,包括数据和表结构
drop table 表名称;
九、SQL-DML
1、添加数据
(1)为表的所有列赋值
- insert into 表名称 values(值列表);
例如:
employee:+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| salary | double | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
insert into employee values(1,"张三",23,10000,"男","1990-01-01");
(2)为表的部分列赋值
- insert into 表名称(字段列表) values(值列表);
insert into employee(id,name) values(2,"李四");
(3)可以一次性增加多行
- insert into 表名称 values(值列表1),(值列表2),....;
- insert into 表名称(字段列表) values(值列表1),(值列表2),....;
例如:
insert into employee(id,name) values(3,"王五"),(4,"赵六"),(5,"钱七");
2、修改数据
- update 表名称 set 字段名1 = 字段值1, 字段名2 = 字段值2 【where 条件】;
例如:
update employee set gender = "男";update employee set age = 24 where name = "李四";
update employee set salary = salary * 2; #给所有人涨薪
3、删除数据
- delete from 表名称 【where 条件】;
例如:
delete from employee;delete from employee where name = "赵六";
4、查看数据
(1)查看所有的数据
- select * from 表名称;
例如:
select * from employee;
(2)查看部分列
- select 字段列表 from 表名称;
例如:
select id,name from employee;
(3)查看部分行
- select * from 表名称 【where 条件】;
- select 字段列表 from 表名称 【where 条件】;
例如:
select * from employee where name ="张三";#查看张三的薪资
select salary from employee where name ="张三";
5、可以在查询结果时,给字段取别名。
- select 字段名1 as "别名1",字段名2 as "别名2" ... from 表名称 【where 条件】;
例如:
select id as "编号", name as "姓名", salary as "薪资" from employee;select id "编 号", name 姓名, salary 薪资 from employee;
以上是 Mysql入门 的全部内容, 来源链接: utcz.com/z/532816.html