1 数据库

1.1 数据库介绍

为什么要有数据库?

数据需要大量的存储,把数据永久保存下来,可以保存到文件中,当然也可以保存到数据库中。

数据库:通俗的说,存储数据的仓库,是管理数据的文件夹;存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的,是长期存放在计算机内、有组织、可共享的数据即可,数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性。

数据库管理软件:

mysql            开源、免费

oracle           企业级数据库管理软件

sqlserver      图形化界面、更加简单、直观

db2               最适于海量数据处理

1.2 mysql数据库服务端和客户端

mysql包括两部分 :

服务端: mysqld

客户端: 通常有cmd  php  python;mysql客户端有很多对其进行友好的支持。

1.3 sql语句规范

SQL是专门为数据库而建立的操作命令集,是一种功能齐全的数据库语言。

SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持sql。

1.在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

2.SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。

3.用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

4.注释:单行注释:--    多行注释:/*......*/

5.sql语句可以折行操作

2 数据库操作

1.创建数据库(在磁盘上创建一个对应的文件夹)

create database [if not exists] db_name [character set ***]

mysql> create database if not exists db_test character set utf8;
Query OK, 1 row affected (0.00 sec)

2.查看数据库

show databases;                 查看所有数据库

show create database db_name;   查看数据库的创建方式

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db_test            |

| mysql              |

| performance_schema |

+--------------------+

5 rows in set (0.00 sec)

mysql> show create database db_test;

+----------+------------------------------------------------------------------+

| Database | Create Database                                                  |

+----------+------------------------------------------------------------------+

| db_test  | CREATE DATABASE `db_test` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+------------------------------------------------------------------+

1 row in set (0.00 sec)

3.修改数据库

修改数据库,只是修改数据库的字符集;不能修改数据库的名字,暂时不支持数据库改名字;

如果真想改名字,去文件夹下改名字;

修改数据库的名字,没有意义;建议不要修改数据库的名字;

修改数据库的字符集,例如:

alter database db_name [character set xxx]

mysql> alter database db_test character set latin1;

Query OK, 1 row affected (0.00 sec)

mysql> show create database db_test;

+----------+--------------------------------------------------------------------+

| Database | Create Database                                                    |

+----------+--------------------------------------------------------------------+

| db_test  | CREATE DATABASE `db_test` /*!40100 DEFAULT CHARACTER SET latin1 */ |

+----------+--------------------------------------------------------------------+

1 row in set (0.00 sec)

4.删除数据库

drop database [if exists] db_name;

mysql> drop database db_test;

Query OK, 0 rows affected (0.05 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

+--------------------+

4 rows in set (0.00 sec)

5.使用数据库

切换数据库 use db_name;

查看当前使用的数据库 select database();

3 数据表操作

3.1 创建表

语法

CREATE TABLE tab_name(

field1 type[完整性约束条件],

field2 type,

...

fieldn type

)[character set xxx];

示例

mysql> create table employee(

    ->             id int primary key auto_increment ,

    ->             name varchar(20),

    ->             gender bit default 1,

    ->             birthday date,

    ->             department varchar(20),

    ->             salary double(8,2) unsigned,

    ->             resume text

    ->           );

Query OK, 0 rows affected (0.05 sec)

3.2 查看表

desc tab_name                              查看表结构

show columns from tab_name       查看表结构

show tables                                   查看当前数据库中的所有的表

show create table tab_name         查看当前数据库表建表语句

mysql> desc employee;

+------------+----------------------+------+-----+---------+----------------+

| Field      | Type                 | Null | Key | Default | Extra          |

+------------+----------------------+------+-----+---------+----------------+

| id         | int(11)              | NO   | PRI | NULL    | auto_increment |

| name       | varchar(20)          | YES  |     | NULL    |                |

| gender     | bit(1)               | YES  |     | b''    |                |

| birthday   | date                 | YES  |     | NULL    |                |

| department | varchar(20)          | YES  |     | NULL    |                |

| salary     | double(8,2) unsigned | YES  |     | NULL    |                |

| resume     | text                 | YES  |     | NULL    |                |

+------------+----------------------+------+-----+---------+----------------+

7 rows in set (0.01 sec)

mysql> show columns from employee;

+------------+----------------------+------+-----+---------+----------------+

| Field      | Type                 | Null | Key | Default | Extra          |

+------------+----------------------+------+-----+---------+----------------+

| id         | int(11)              | NO   | PRI | NULL    | auto_increment |

| name       | varchar(20)          | YES  |     | NULL    |                |

| gender     | bit(1)               | YES  |     | b''    |                |

| birthday   | date                 | YES  |     | NULL    |                |

| department | varchar(20)          | YES  |     | NULL    |                |

| salary     | double(8,2) unsigned | YES  |     | NULL    |                |

| resume     | text                 | YES  |     | NULL    |                |

+------------+----------------------+------+-----+---------+----------------+

7 rows in set (0.00 sec)

mysql> show tables;

+-------------------+

| Tables_in_db_test |

+-------------------+

| employee          |

+-------------------+

1 row in set (0.00 sec)

mysql> show create table employee\G

*************************** 1. row ***************************

       Table: employee

Create Table: CREATE TABLE `employee` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) DEFAULT NULL,

  `gender` bit(1) DEFAULT b'',

  `birthday` date DEFAULT NULL,

  `department` varchar(20) DEFAULT NULL,

  `salary` double(8,2) unsigned DEFAULT NULL,

  `resume` text,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

3.3 修改表结构

1.增加列(字段)

alter table t_name add [column] 列名 类型[完整性约束条件][first|after 字段名];

mysql> alter table t1 add tname varchar(20), add sex varchar(10);

Query OK, 0 rows affected (0.10 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| age   | varchar(20) | YES  |     | NULL    |       |

| tname | varchar(20) | YES  |     | NULL    |       |

| sex   | varchar(10) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.01 sec)

2.修改一列类型

alter table t_name modify 列名 类型 [完整性约束条件][first|after 字段名];

mysql> alter table t1 modify sex varchar(5) first;

Query OK, 0 rows affected (0.07 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| sex   | varchar(5)  | YES  |     | NULL    |       |

| id    | int(11)     | YES  |     | NULL    |       |

| age   | varchar(20) | YES  |     | NULL    |       |

| tname | varchar(20) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.01 sec)

3.修改列名

alter table t_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];

mysql> alter table t1 change sex sex_new int;

Query OK, 0 rows affected (0.07 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;

+---------+-------------+------+-----+---------+-------+

| Field   | Type        | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| sex_new | int(11)     | YES  |     | NULL    |       |

| id      | int(11)     | YES  |     | NULL    |       |

| age     | varchar(20) | YES  |     | NULL    |       |

| tname   | varchar(20) | YES  |     | NULL    |       |

+---------+-------------+------+-----+---------+-------+

4 rows in set (0.02 sec)

4.删除一列

alter table t_name drop [column] 列名;

mysql> alter table t1 drop sex_new;

Query OK, 0 rows affected (0.06 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| age   | varchar(20) | YES  |     | NULL    |       |

| tname | varchar(20) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

5.修改表名

rename table 表名 to 新表名;

mysql> rename table t1 to t1_new;

Query OK, 0 rows affected (0.05 sec)

mysql> show tables;

+-------------------+

| Tables_in_db_test |

+-------------------+

| employee          |

| t1_new            |

+-------------------+

2 rows in set (0.00 sec)

6.修该表所用的字符集

alter table t_name character set utf8;

mysql> alter table t1 character set latin1;

Query OK, 0 rows affected (0.05 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table t1\G

*************************** 1. row ***************************

       Table: t1

Create Table: CREATE TABLE `t1` (

  `id` int(11) DEFAULT NULL,

  `age` varchar(20) CHARACTER SET utf8 DEFAULT NULL,

  `tname` varchar(20) CHARACTER SET utf8 DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 row in set (0.00 sec)

3.4 删除表

drop table if exists t_name;

mysql> show tables;

+-------------------+

| Tables_in_db_test |

+-------------------+

| employee          |

| t1                |

+-------------------+

2 rows in set (0.00 sec)

mysql> drop table t1;

Query OK, 0 rows affected (0.03 sec)

mysql> show tables;

+-------------------+

| Tables_in_db_test |

+-------------------+

| employee          |

+-------------------+

1 row in set (0.00 sec)

4 表记录操作

4.1 插入记录

1.插入一条记录:

insert [into] t_name (field1,filed2,.......) values (value1,value2,.......);

2.插入多条记录:

insert [into] t_name (field1,filed2,.......) values (value1,value2,.......),
            (value1,value2,.......),...;

4.2 修改记录

update t_name set field1=value1,field2=value2,......[where 语句]

示例:

update t_new set brith="1989-10-24" where id=1;

4.3 删除记录

delete只能用来删除一行记录,删除记录,是一行一行的删除。

TRUNCATE TABLE也可以删除表中的所有数据,首先摧毁表,再新建表。

4.4 查询记录

存储与查询效率冲突时,查询优先;也就是查询时最重要的一步,建立索引是为了提高查询效率

5 查询记录

5.1 概述

查询语法:

   select *|field1,filed2 ...   from t_name

                  where 条件

                  group by field

                  having 筛选

                  order by field

                  limit 限制条数

mysql在执行sql语句时的执行顺序:

from  where  select  group by  having order by

5.2 where 子句使用

where字句中可以使用:

比较运算符:

> < >= <= <> !=

between ** and **

in(**,**,**)

like 'chen%'

逻辑运算符

在多个条件直接可以使用逻辑运算符 and or not

5.3 group by子句

group by语句根据某个列对结果集进行分组。在分组的列上我们可以使用 count、sum、avg等函数进行相关查询。其主要目的是为分组之后的统计而用的。

示例:

select name,count(name) as num from t1 group by dep order by num desc;

select name,max(age) as num from t1 group by dep;

5.4 having子句

having子句,是过滤用的;是对分组之后的再次过滤。

5.5 order by子句

按指定的列进行,排序的列即可是表中的列名,也可以是select语句后指定的别名。

select *|field1,field2... from tab_name order by field [asc|desc]

5.6 limit

select * from t1 limit 1;

6 多表查询

6.1 笛卡尔积

select * from t1,t2;

6.2 内连接

查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。

select * from t1 inner join t2 on t1.id = t2.t1_id;

6.3 左外连接

左外连接:在内连接的基础上增加左边有右边没有的结果,也就是以左边的表为主;例如

 select * from t1 left join t2 on t1.id= t2.t1_id;

6.4 右外连接

右外连接:在内连接的基础上增加右边有左边没有的结果,也就是以右边的表为主;例如:

select * from t1 right join t2 on t1.id= t2.t1_id;

7 完整性约束

完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等 。直观点说:如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作

7.1 唯一性约束

唯一约束可以有多个但索引列的值必须唯一,索引列的值允许有空值。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE。

创建唯一约束:

create unique index UK_t1_name on t1 (name);

建表后添加约束:

alter table t1 add constraint UK_t1_name unique (name);

如果不需要唯一约束,则可以这样删除

alter table t1 drop index UK_t1_name;

7.2 自增约束

MySQL每张表只能有1个自动增长字段,这个自动增长字段通常作为主键,也可以用作非主键使用,但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引,否则系统将会报错。

7.3 主键约束

主键是用于唯一标识一条记录的约束,如同身份证。

主键有两个约束:非空且唯一!

7.4 复合主键

所谓的复合主键 就是指你表的主键含有一个以上的字段。

如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式

建表时:

create table t1 (

    c_id int,

    d_id int,

primary key (c_id,d_id)

);       

修改时:

alter table tb_name add primary key (字段1,字段2,字段3);

7.5 外键约束

外键的定义语法:

  [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

                    REFERENCES tbl_name (index_col_name, ...)

    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

该语法 可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。

8 表关系

表关系:是表与表之间的关系,有一对一、一对多、多对多;一定是两张表之间的关系。

一对多,将关联字段设置在多的表中

多对多,借助第三张表实现的

数据库之mysql的基本操作的更多相关文章

  1. 数据库MySQL的基本操作

    1.MySQL数据库的安装: CentOS6上mysql服务端和客户端的安装和启动: #使用yum安装mysql数据库的服务端和客户端 yum install -y mysql mysql-serve ...

  2. MySQL<数据库和表的基本操作>

    数据库和表的基本操作 数据库基础知识 创建数据库 就是在数据库系统中划分一块存储数据的空间 CREATE DATABASE itcast; 查看数据库 SHOW CREATE DATABASE 数据库 ...

  3. Mariadb/MySQL数据库单表查询基本操作及DML语句

    Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

  4. linux的基本操作(mysql 的基本操作)

    Mysql 的基本操作 在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些 ...

  5. python数据库操作 - MySQL入门【转】

    python数据库操作 - MySQL入门 python学院 2017-02-05 16:22 PyMySQL是Python中操作MySQL的模块,和之前使用的MySQLdb模块基本功能一致,PyMy ...

  6. php基础系列:从用户登录处理程序学习mysql扩展基本操作

    用户注册和登录是网站开发最基本的功能模块之一,现在通过登录处理程序代码来学些下php对mysql的基本操作. 本身没有难点,主要是作为开发人员,应该能做到手写这些基本代码,算是自己加强记忆,同时希望能 ...

  7. 【MySQL 数据库】MySQL目录

    目录 [第一章]MySQL数据概述 [第二章]MySQL数据库基于Centos7.3-部署 [MySQL解惑笔记]Centos7下卸载彻底MySQL数据库 [MySQL解惑笔记]忘记MySQL数据库密 ...

  8. mysql 的基本操作总结--增删改查

    本文只是总结一下mysql 的基本操作,增删改查,以便忘记的时候可以查询一下 1.创建数据库 语法:CREATE DATABASES 数据库名; 例子: CREATE DATABASES studen ...

  9. 【数据库】MySQL 从安装到命令

    一, MySQL 的安装于配置 我是通过百度云盘的方式下载的.建议登录百度云终端,然后点击下面的链接,选择要安装的版本,解压安装. http://www.h2ero.cn/pan/share/17cd ...

随机推荐

  1. hdu 1213 How Many Tables(并查集算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 How Many Tables Time Limit: 2000/1000 MS (Java/O ...

  2. 【转】linux下杀死进程

    经过搜集和整理相关的Linux操作系统杀死进程的材料,在这里给大家推荐本篇文章,希望大家看后会有不少收获. 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID 举例: ...

  3. Python3 文件基本操作

    Python文件的打开模式有: r,只读模式(默认).w,只写模式.[不可读:不存在则创建:存在则删除内容:]a,追加模式.[可读: 不存在则创建:存在则只追加内容:]"+" 表示 ...

  4. 开源网络准入系统(open source Network Access Control system)

    开源网络准入系统(open source Network Access Control system) http://blog.csdn.net/achejq/article/details/5108 ...

  5. 非 GUI 模式运行 JMeter 压力测试

    非 GUI 模式,即命令行模式,运行 JMeter 测试脚本能够大大缩减所需要的系统资源. 使用命令:jmeter -n -t <testplan filename> -l <lis ...

  6. SqlServer开启CLR使用(C#)DLL实现实时Socket通知

    --1.默认情况下,SQL Server中的CLR是关闭的,所以我们需要执行如下命令打开CLR: reconfigure GO -- DROP FUNCTION dbo.fnScoketSend -- ...

  7. Hadoop(hadoop,HBase)组件import到eclipse

    1.简介: 将源代码import到eclipse可以方便的阅读和修改源码. 2.环境说明: mac mvn工具(Apache Maven 3.3.3 ) 3.hadoop(CDH5.4.2) 1.进入 ...

  8. PHP-5.3.27源码安装及nginx-fastcgi配置

    源码安装php cat /etc/redhat-release uname -rm wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.c ...

  9. POJ-2594

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7035   Accepted: 2 ...

  10. 《java并发编程实战》读书笔记12--原子变量,非阻塞算法,CAS

    第15章 原子变量与非阻塞同步机制 近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁老确保数据在并发访问中的一致性. 15.1 锁的劣势 ...