MySql简单入门(一)

数据库的操作

1.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数据库了。

当一个电脑安装了数据库之后,那么这台电脑中就可以使用数据库来保存数据了:

MySql简单入门(一)

说明:

1、一个数据库软件可以安装多个数据仓库,数据仓库可以简称为数据库,在数据库中创建数据表来保存数据。

2、数据库的一行称为记录,可以理解成java实例化后的一个对象。

3、数据库的一列称为字段,理解成java类中的属性。

4、一个数据仓库中是可以有多张表的。

未来关于数据库我们学习的目标:

  1. 对数据库进行增删改查(CRUD);(主要对整个数据库进行操作,比如删除一个数据库和增加一个数据库)。create(增) read(查) update(改) delete(删)
  2. 对数据表结构进行增删改查(CRUD);(主要对整张表,比如删除一张表和增加一张表)。
  3. 对表中的数据进行增删改查(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语句的路线:

  1. 学习SQL数据对数据库的操作;
  2. 学习SQL语句对数据表整体结构的操作;
  3. 学习SQL语句对数据表中的数据记录操作(★★★★★)
  4. 数据仓库中的数据备份和恢复;

4.查询所有数据库

查询当前所有的数据库:

语法: show databases;

查看当前数据库的创建方式:查看数据库的编码表

语法:show create database 库名;

说明:

     1)当我们创建数据库的时候,如果没有指定编码表,默认使用的是安装数据库软件时指定的编码表;

     2)每一条sql语句需要有 ; 分号,表示结束。

5.创建数据库

创建数据库的语法:

1、create database 数据库名 :由于创建数据库时没有指定编码表,因此会使用安装数据库时默认的编码表

2create database 数据库名 character set 编码表名; 创建数据库会使用指定的编码表

注意:如果创建数据库指定的编码表是utf8,记住不能写utf-8.utf-8 是错误的

(mysql不认识utf-8)

java中的常用编码        : UTF-8; GBK;GB2312;ISO-8859-1;

对应mysql数据库中的编码: utf8;  gbk;gb2312; latin1;

6.删除数据库

语法:drop database 数据库名;

7.修改数据库编码集

语法:alter database 数据库名称 character set 字符集;

8.切换数据库和查看正在使用的数据库

 1)切换数据库:

语法: use 数据库名;

2)查询当前正在使用的数据库:

有时过于频繁的切换数据库就会导致忘了正在使用哪个数据库,可以使用查看语句。

语法:select database();

9.数据表结构的增删改查

1>数据表的创建

注意:创建表的时候,一定要先切换到某一个具体的数据库。因为只有某一个具体的仓库下才会有数据库表。

语法:use 数据库名;

创建数据库表的语法:

语法:

create table 表名(

列名 类型(长度), ----某一列,存放的数据是什么类型.长度表示允许列名存储数据的最大长度.

列名 类型(长度),

..........................

列名 类型(长度)---最后一个列不需要逗号。

);

注意:

1)一个数据表可以存在很多列(字段),每列具有类型和长度。

2)多个列之间使用逗号隔开,最后一个列不需要输入逗号。

3)创建表的时候,一定切换到某一个具体的数据库。

use 数据库名。

2>MySql数据库中的数据类型。

  1. 字符类型
  1. varchar(列的长度):列的长度可变。 

name varchar(10):设置name字段的长度为10,name的储存长度在10以内都可以,并且会自动适应长短。

补充:保存字符个数:0-255.

  1. char(列的长度):列的长度固定,不能改变。

name char(10):设置name字段的长度为10,name的存储长度在10以内,如果不满10,用空格补足。

举例:假设我们要存储 abcd 这个字符串。

如果定义成varchar(10) 这时储存的数据不足10个,这时会把多余取消,只占4个。

如果使用char(10),它会把存储的数据添加到10个长度。剩下的用空格补足。

如果存储的长度超出了表中列的长度,存储报错。

总结:char 的性能好。 varchar可以节省空间。

通常的情况,如果长度不固定,我们使用varchar

使用char的情况。当某个字段的长度固定的时候,可以采用char。例如身份证号或者手机号。

  1. 大数据类型--了解
  1. BLOB-字节:存放二进制内容,即字节数据。

一般可以存放视频、音频、图片等。

  1. TEXT:保存字符数据,存放大文本。存放可以超过255个字符。

通常我们不会把文件存储到数据库。(占用资源,操作速度慢)

我们会把文件的路径(通常存放在本地磁盘)存到数据库中。

  1. 数值型
  1. 整形:TINYINT 、SMALLINT、INT、BIGINT
  2. 小数:FLOAT(单精度)、DOUBLE(双精度)
  3. 位数据类型 (逻辑性)--了解 就是java中的boolean
  4. BIT: 1 或者0组成的数据。

1 表示true

0 表示false

  1. 日期型
  1. DATE:日期----只有日期, 2013年08月19日
  2. Time:时间-----时分秒,12时24分30秒
  3. DateTime:日期和时间都包含,年月日时分秒
  4. 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

);

3>查看表

  1. show tables : 查看该数据库的所有的表。
  2. desc 表名:查看表的列的信息(查看表结构)。

4>单表创建时约束

约束:通过某些限制,来规定当前某张数据表中的列数据是否可以为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

);

5>数据表结构修改

修改数据表:

可以对表名、表中的列名、列的类型、列的约束进行增删改。

语法: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;

6>数据表删除

语法:drop table 表名;

需求:删除emp表。

drop table emp;