MySql简单入门(一)
数据库的操作
当一台电脑安装了mysql数据库软件,这台电脑就可以称为一个数据库服务器。用户可以连接这台电脑中的mysql数据库。
用户通过在dos窗口中输入:
mysql [-h 连接的主机ip -P端口3306] -u 用户名 -p 密码
mysql -h 192.168.1.251 -P 3306 -u root -p 123 前提是 192.168.1.253 主机远程的访问开启。
如果连接的是本机:可以省略 -h -P 主机IP和端口。这样就可以登录mysql数据库了。
当一个电脑安装了数据库之后,那么这台电脑中就可以使用数据库来保存数据了:
说明:
1、一个数据库软件可以安装多个数据仓库,数据仓库可以简称为数据库,在数据库中创建数据表来保存数据。
2、数据库的一行称为记录,可以理解成java实例化后的一个对象。
3、数据库的一列称为字段,理解成java类中的属性。
4、一个数据仓库中是可以有多张表的。
未来关于数据库我们学习的目标:
- 对数据库进行增删改查(CRUD);(主要对整个数据库进行操作,比如删除一个数据库和增加一个数据库)。create(增) read(查) update(改) delete(删)
- 对数据表结构进行增删改查(CRUD);(主要对整张表,比如删除一张表和增加一张表)。
- 对表中的数据进行增删改查(CRUD);(主要对表中的具体数据,比如删除一个表中的一行记录和增加一行数据)。
注意:关于对数据库表的操作,查询是开发中最难的,也是最重要的;
总结:
一个数据库软件,可以管理多个数据仓库(数据库)。
一个数据仓库可以管理多张数据表。
每个数据表中可以存储多行数据记录。
提示:每创建一个数据仓库,会在mysql的数据文件目录(data)中多一个文件夹
2.SQL语句
SQL语句:Structured Query Language结构化查询语言。SQL语句不依赖于任何平台,对所有的数据库是通用的。学会了SQL语句的使用,可以在任何的数据库使用。SQL语句功能强大、简单易学、使用方便。
特点:
SQL语句是一个非过程性的语言,每一条SQL执行完都会有一个具体的结果出现。多条语句之间没有影响。
过程性语言:例如java。
int a = 10;
int b = 20;
int sum = a +b;
SQL语句:主要是操作数据库,数据表,数据表中的数据记录。
SQL是用来存取关系数据库的语言,具有定义、操纵、控制和查询关系型数据库的四方面功能。
所以针对四方面功能,我们将SQL进行了分类。
3.SQL分类
DDL (数据定义语言)
数据定义语言 - Data Definition Language
用来定义数据库的对象,如数据表
create drop alter truncate(清空数据记录)等
DML (数据操纵语言)★★★
数据处理语言 - Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update(更新), insert(插入), delete(删除) 不包含查询
DCL (数据控制语言)
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如grant(设置权限),revoke(撤销权限),begin transaction等
DQL (数据查询语言)(★★★★★)
数据查询语言 – Data Query Language
数据表记录的查询。
select。。。
我们学习SQL语句的路线:
- 学习SQL数据对数据库的操作;
- 学习SQL语句对数据表整体结构的操作;
- 学习SQL语句对数据表中的数据记录操作(★★★★★);
- 数据仓库中的数据备份和恢复;
查询当前所有的数据库:
语法: show databases;
查看当前数据库的创建方式:查看数据库的编码表
语法:show create database 库名;
说明:
1)当我们创建数据库的时候,如果没有指定编码表,默认使用的是安装数据库软件时指定的编码表;
2)每一条sql语句需要有 ; 分号,表示结束。
创建数据库的语法:
1、create database 数据库名 :由于创建数据库时没有指定编码表,因此会使用安装数据库时默认的编码表
2、create database 数据库名 character set 编码表名; 创建数据库会使用指定的编码表
注意:如果创建数据库指定的编码表是utf8,记住不能写utf-8.。utf-8 是错误的
(mysql不认识utf-8)。
java中的常用编码 : UTF-8; GBK;GB2312;ISO-8859-1;
对应mysql数据库中的编码: utf8; gbk;gb2312; latin1;
语法:drop database 数据库名;
语法:alter database 数据库名称 character set 字符集;
1)切换数据库:
语法: use 数据库名;
2)查询当前正在使用的数据库:
有时过于频繁的切换数据库就会导致忘了正在使用哪个数据库,可以使用查看语句。
语法:select database();
9.数据表结构的增删改查
注意:创建表的时候,一定要先切换到某一个具体的数据库。因为只有某一个具体的仓库下才会有数据库表。
语法:use 数据库名;
创建数据库表的语法:
语法:
create table 表名(
列名 类型(长度), ----某一列,存放的数据是什么类型.长度表示允许列名存储数据的最大长度.
列名 类型(长度),
..........................
列名 类型(长度)---最后一个列不需要逗号。
);
注意:
1)一个数据表可以存在很多列(字段),每列具有类型和长度。
2)多个列之间使用逗号隔开,最后一个列不需要输入逗号。
3)创建表的时候,一定切换到某一个具体的数据库。
use 数据库名。
2>MySql数据库中的数据类型。
- 字符类型
- varchar(列的长度):列的长度可变。
name varchar(10):设置name字段的长度为10,name的储存长度在10以内都可以,并且会自动适应长短。
补充:保存字符个数:0-255.
- char(列的长度):列的长度固定,不能改变。
name char(10):设置name字段的长度为10,name的存储长度在10以内,如果不满10,用空格补足。
举例:假设我们要存储 abcd 这个字符串。
如果定义成varchar(10) 这时储存的数据不足10个,这时会把多余取消,只占4个。
如果使用char(10),它会把存储的数据添加到10个长度。剩下的用空格补足。
如果存储的长度超出了表中列的长度,存储报错。
总结:char 的性能好。 varchar可以节省空间。
通常的情况,如果长度不固定,我们使用varchar。
使用char的情况。当某个字段的长度固定的时候,可以采用char。例如身份证号或者手机号。
- 大数据类型--了解
- BLOB-字节:存放二进制内容,即字节数据。
一般可以存放视频、音频、图片等。
- TEXT:保存字符数据,存放大文本。存放可以超过255个字符。
通常我们不会把文件存储到数据库。(占用资源,操作速度慢)
我们会把文件的路径(通常存放在本地磁盘)存到数据库中。
- 数值型
- 整形:TINYINT 、SMALLINT、INT、BIGINT
- 小数:FLOAT(单精度)、DOUBLE(双精度)
- 位数据类型 (逻辑性)--了解 就是java中的boolean
- BIT: 1 或者0组成的数据。
1 表示true
0 表示false
- 日期型
- DATE:日期----只有日期, 2013年08月19日
- Time:时间-----时分秒,12时24分30秒
- DateTime:日期和时间都包含,年月日时分秒
- TIMESTAMP :日期和时间都包含 ------->当表中其他数据被修改的时候,那么此时时间就会自动更改为更改数据时的时间。
举例:
id name updatetime
1 lisi 12时24分30秒
如果修改name的值为zhangsan,此时时间是: 12时25分00秒.
修改完成之后,updatetime的值就会变为12时25分00秒.
需求:创建雇员表,包含雇员的姓名,密码,性别, 生日信息。
注意:如果刚连数据库的话,需要先切换一个数据库才能进行建表。
例子:
create table emp(
name varchar(50),
password varchar(50),
sex char(10),
birthday date
);
- show tables : 查看该数据库的所有的表。
- desc 表名:查看表的列的信息(查看表结构)。
约束:通过某些限制,来规定当前某张数据表中的列数据是否可以为null,是否可以重复,当前某一列中的数据在当前表中必须唯一等限制。
约束的目的:只是为了保证存储在数据表中的数据完整性和有效性。从而可以确保数据库满足业务规则。
约束语法:
列名 数据类型 约束条件
1、主键约束:primary key
主键一般表示数据库中的某一列,使用这一列来区分数据表中的数据和其他数据不同。这一列的数据在整个数据表中是不允许重复的,并且不为空。
注意:只要某一列被声明为主键,那么这个列就不能重复,并且不能为空。
举例:创建一张表,保存学生的信息,需要在表中创建一列,来区分当前的这个一行数据和其他的行不同。这个列称为主键。这里可以将主键理解为学生学号。
在实际开发中,通过主键是可以快速找到要查找的数据。
主键的定义格式:
列名 列的类型 primary key
补充:自增长 auto_increment
如果表的主键是int 类型,这时可以在主键的后面添加 auto_increment ,这时表中这一列在添加数据的时候,会自动的增长。
示例:
create table 表名 (
id int primary key auto_increment,
name varchar(20),
………….
);
2、唯一约束:unique
该列(字段)的值不允许重复。可以为null(null不算重复)。
解释:一张表中可以有很多个唯一约束。
写法: 列名 类型(长度) unique
【示例】
create table 表名 (
id int primary key auto_increment,
name varchar(20) unique,
………….
);
唯一约束和主键约束的区别:
1、唯一约束可以是空(null)。 但是主键约束不能为空
2、一张表中只能有一个主键,但是唯一约束可以有多个
3.非空约束,not null。
表示该列的内容不允许为空。该字段的值不能为空。
写法: 列名 类型(长度) not null,
【示例】
create table emp(
id int primary key auto_increment,
name varchar(20) unique,
age int not null,
………….
);
【示例】
需求:创建一个员工表2,员工有工号(整型)、姓名、密码、性别、生日。
1、要求工号是主键并且设置主键自增长;
2、姓名必须是唯一性且不为空的;
3、密码必须是非空的;
建表语句如下:
create table emp2(
id int primary key auto_increment,
name varchar(50) unique not null,
password varchar(50) not null,
sex varchar(50),
birthday date
);
修改数据表:
可以对表名、表中的列名、列的类型、列的约束进行增删改。
语法:alter table 表名 增/删/改 列名 类型(长度) 约束;
1.增加列 语法: alter table 表名 add 列名 类型(长度) 约束
需求1:在emp2表上增加salary列。
alter table emp2 add salary double;
需求2:在emp2表上增加age列。
alter table emp2 add age int;
2.修改现有列类型、长度和约束
语法:alter table 表名 modify 列名 类型(长度) 约束;
需求1:修改birthday列不能为null。
alter table emp2 modify birthday date not null;
需求2:修改name列的长度为60。
alter table emp2 modify name varchar(60) unique not null;
3.修改现有列名称
语法:alter table 表名 change 旧列名 新列名 类型(长度) 约束;
需求:修改列名name变为username。
alter table emp2 change name username varchar(60) unique not null;
4.删除现有列
语法:alter table 表名 drop 列名 ;
需求:删除age列。
alter table emp2 drop age;
5.修改表名
语法: rename table 旧表名 to 新表名;
需求:将emp2表名修改为person表
rename table emp2 to person;
6.修改表的字符集
语法:alter table 表名 character set 编码集;
需求: 将emp的编码修改成utf8。
第一步:查询此时表的编码。
show create table emp;
第二步:将emp的编码修改成utf8
alter table emp character set utf8;
语法:drop table 表名;
需求:删除emp表。
drop table emp;