进击のpython

*****

数据库——初识sql语句


前面提到了说,数据库管理系统就像我们曾经做过的输入命令返回结果的socket通信差不多

那既然提到了命令,在MySQL中,有一些基本的语句,就应该被知道

刚开始学的时候可能觉得这些这么多的英语单词,我记不住怎么办?

其实你会发现,好多的语句其实跟我们说话的方式很像(我会在介绍语句的时候说),记忆起来就不是很困难

如果是单词的问题,就只能建议你多敲多联系了,“无他,唯手熟尔”

数据库本质也就只是个文件对吧,那是个文件就有:增 查 改 删

所以我们会针对库,表,记录的这四个方法来进行介绍,一定注意,多敲!


库(操作文件夹)

create database db1 charset utf8;

(创建 数据库 db1 编码设置 utf8)

mysql> create database db1 charset utf8;
Query OK, 1 row affected (0.05 sec)

这样就相当于建一个文件夹,其实也真的建立了一个文件夹

现在我们是在本机的数据库操作,所以数据都存放在了本地,那我们看看我们新建的数据库文件

找到你的数据库安装目录,能看到一个叫做data的文件夹,看名字也知道这个名字是数据的意思

我们打开它,是不是发现了我们新建的库:db1,而且是文件夹的形式吧!

数据库的命名也是有规范的:

  1. 可以由字母、数字、下划线、@、#、$
  2. 区分大小写
  3. 唯一性
  4. 不能使用关键字如 create select
  5. 不能单独使用数字
  6. 最长128位

表也可以复制

复制表结构+记录 (key不会复制: 主键、外键和索引)

create table new_service select * from t1;

mysql> create table new_service select * from t1;
Query OK, 2 rows affected (1.07 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> show
-> tables;
+---------------+
| Tables_in_db1 |
+---------------+
| new_service |
| t1 |
+---------------+
2 rows in set (0.00 sec) mysql> desc new_service;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec) mysql> select * from new_service;
+------+------+------+------+-------+------+
| num | id | name | sex | hobby | job |
+------+------+------+------+-------+------+
| NULL | 1 | 1 | 1 | 男 | 无 |
| NULL | 1 | 1 | 1 | 男 | 无 |
+------+------+------+------+-------+------+
2 rows in set (0.00 sec)

只复制表结构

create table t2 select * from t1 where 1=2; //条件为假,查不到任何记录

mysql> create table t2 select * from t1 where 1=2;
Query OK, 0 rows affected (1.07 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| new_service |
| t1 |
| t2 |
+---------------+
3 rows in set (0.00 sec) mysql> desc t2;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec) mysql> select * from t2;
Empty set (0.00 sec)

还有种简单的:

create table t3 like t1;

mysql> create table t3 like t1;
Query OK, 0 rows affected (1.03 sec) mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| new_service |
| t1 |
| t2 |
| t3 |
+---------------+
4 rows in set (0.00 sec) mysql> desc t3;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec) mysql> select * from t3;
Empty set (0.00 sec)

show create database db1;

(展示 创建 数据库 db1)

mysql> show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

show databases;

(展示 所有数据库)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)

改其实无非就是改编码格式

alter database db1 charset gbk;

(修改 数据库 db1 编码格式 gbk)

mysql> alter database db1 charset gbk;
Query OK, 1 row affected (0.34 sec) mysql> show create database db1;
+----------+-------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)

是不是编码格式被修改了!

drop database db1;

(删掉 数据库 db1)

mysql> drop database db1;
Query OK, 0 rows affected (0.41 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)

这回所有的数据库中就不再有db1了

那你猜猜在data文件夹里还有db1这个文件夹了吗??


表(文件)

首先表(文件)必须要在库(文件夹)下,所以操作之前先建一个库db1(文件夹)

然后切换到这个文件夹下:

use db1;

(使用 db1)

mysql> use db1;
Database changed

其实这里可以提一句,你可以通过select database();来看你目前在哪个数据库下(文件夹里)

mysql> select database();
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)

要创建一个表,是不是应该有相应字段(比如前一节例子的 姓名,性别之类的),同时要给每一个字段的类型

create table t1(id int,name char,age int,sex char,hobby char,job char);

(创建 表 t1(id int型,name char型,... ...))

mysql> create table t1(id int,name char,age int,sex char,hobby char,job char);
Query OK, 0 rows affected (1.17 sec)

那我们去找一下db1文件夹,看看里面是不是新建了表(自己去看)

那总结起来,其实就是如下的格式:

create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]

);

注意:

  1. 在同一张表中,字段名是不能相同
  2. 宽度和约束条件可选
  3. 字段名和类型是必须的
  4. 最后一个数据之后不要加'',''

aletr table t1 add times char;

(修改 表 t1 加 times 字符串类型)

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
5 rows in set (0.01 sec) mysql> alter table t1
-> add times char;
Query OK, 0 rows affected (1.29 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec)

默认添加在最后,当然你也可以添加到开头

aletr table t1 add times char first;

mysql> alter table t1
-> add num char first;
Query OK, 0 rows affected (1.45 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
7 rows in set (0.01 sec)

show create table t1;

(展示 创建 表 t1)

mysql> show create table t1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`name` char(1) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`hobby` char(1) DEFAULT NULL,
`job` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

可能是会拿到这种乱七八糟的,就是因为他想给你拼个表格出来,但是太多了,就拼错了

但是关键的信息我们还是能看到的对吧

show tables;

(展示 所有表)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
+---------------+
1 row in set (0.00 sec)

desc t1;

(查看列和数据类型 t1)

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.35 sec)

看着舒服点了吧~~~

alter table t1 rename t2;

(修改 表 t1 重命名 t2)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
+---------------+
1 row in set (0.06 sec) mysql> alter table t1
-> rename t2;
Query OK, 0 rows affected (0.57 sec) mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t2 |
+---------------+
1 row in set (0.00 sec)

alter table t1 modify name char(5);

(修改 表 t1 修改 name字段 char(5))

mysql> alter table t1 modify name char(5);
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(5) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec)

除了改字符长度,还可以修改字段

alter table t1 change name NAME char(5);

(修改 表 t1 改变 name 为 NAME char(5))

mysql> alter table t1 change name NAME char(5);
Query OK, 0 rows affected (0.51 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| NAME | char(5) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec)

drop table t1;

(删掉 表 t1)

mysql> drop table t1;
Query OK, 0 rows affected (0.55 sec) mysql> show tables;
Empty set (0.00 sec)

看看你的data文件夹下的db1还有文件了吗?

alter table t1 drop times;

(修改 表 t1 删掉 times)

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
| times | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
7 rows in set (0.01 sec) mysql> alter table t1
-> drop times;
Query OK, 0 rows affected (1.48 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | char(1) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.01 sec)

接下来的这些写法,你现在可能不知道什么意思,但是要记下来

1.修改存储引擎

mysql> alter table t1

-> engine=innodb;

2.添加stu_num到name字段之后

mysql> alter table t1
-> add stu_num int after name;

3.修改字段类型

mysql> alter table t1
-> modify age int(3);

4.增加约束(针对已有的主键增加auto_increment)

mysql> alter table t1 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined
mysql> alter table t1 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

5.对已经存在的表增加复合主键

mysql> alter table t1
-> add primary key(host_ip,port);

6.增加主键

mysql> alter table t1
-> modify name char primary key;

7.增加主键和自动增长

mysql> alter table t1
-> modify id int primary key auto_increment;

8.删除主键

mysql> alter table t1 modify id int(11) not null;  #删除自增约束
mysql> alter table t1
-> drop primary key; #删除主键

记录

对记录的操作首先要有库和表对吧

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| hobby | char(1) | YES | | NULL | |
| job | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
5 rows in set (0.44 sec)

insert t1(id,name,sex,hobby,job)values(1,'张三',18,'男','无业');

(插入 t1... ...)

mysql> insert t1(id,name,sex,hobby,job)values(1,'张三',18,'男','无业');
Query OK, 1 row affected, 3 warnings (0.44 sec)

多个添加:

insert t1(id,name,sex,hobby,job)values(1,'张三',18,'男','无业'),(2,'李四',20,'女','学生');

mysql> insert t1(id,name,sex,hobby,job)values(1,'张三',18,'男','无业'),(2,'李四',20,'女','学生');
Query OK, 2 rows affected, 6 warnings (0.38 sec)
Records: 2 Duplicates: 0 Warnings: 6 mysql> select * from t1;
+------+------+------+-------+------+
| id | name | sex | hobby | job |
+------+------+------+-------+------+
| 1 | 1 | 1 | 男 | 无 |
| 1 | 张 | 1 | 男 | 无 |
| 2 | 李 | 2 | 女 | 学 |
+------+------+------+-------+------+
3 rows in set (0.00 sec)

select * from t1;

(查找 所有 从 t1)

mysql> select * from t1;
+------+------+------+-------+------+
| id | name | sex | hobby | job |
+------+------+------+-------+------+
| 1 | 张 | 1 | 男 | 无 |
+------+------+------+-------+------+
1 row in set (0.00 sec)

这么写的前提是你已经在db1下面了,如果不在 后面的t1 就改写成db1.t1就好了

如果我只查姓名,就把*改成字段name 如果查姓名年龄,就改成 name,age

然后你就会发现,少字了

其实到这就该跟你说,char(数字)代表着这个字段容纳的字符个数,因为都是1,所以只留一个

我们可以修改一下!

update db1.t1 set name = '1';

(更新 db1里面的t1表 设置 name 为 1)

一旦是这么写的会发生什么呢?

mysql> update db1.t1 set name = '1';
Query OK, 2 rows affected (0.38 sec)
Rows matched: 3 Changed: 2 Warnings: 0 mysql> select * from t1;
+------+------+------+-------+------+
| id | name | sex | hobby | job |
+------+------+------+-------+------+
| 1 | 1 | 1 | 男 | 无 |
| 1 | 1 | 1 | 男 | 无 |
| 2 | 1 | 2 | 女 | 学 |
+------+------+------+-------+------+
3 rows in set (0.00 sec)

我会发现我把所有的name都改掉了,那我要是只想改id=2的name呢?

update db1.t1 set name = '1' where id = 2;

mysql> update db1.t1 set name = 'haha' where id = 2;
Query OK, 1 row affected, 1 warning (0.38 sec)
Rows matched: 1 Changed: 1 Warnings: 1 mysql> select * from t1;
+------+------+------+-------+------+
| id | name | sex | hobby | job |
+------+------+------+-------+------+
| 1 | 1 | 1 | 男 | 无 |
| 1 | 1 | 1 | 男 | 无 |
| 2 | h | 2 | 女 | 学 |
+------+------+------+-------+------+
3 rows in set (0.00 sec)

delete from t1 where id = 2;

(删除 从t1 ... ...)

mysql> delete from t1 where id = 2;
Query OK, 1 row affected (0.38 sec) mysql> select * from t1;
+------+------+------+-------+------+
| id | name | sex | hobby | job |
+------+------+------+-------+------+
| 1 | 1 | 1 | 男 | 无 |
| 1 | 1 | 1 | 男 | 无 |
+------+------+------+-------+------+
2 rows in set (0.00 sec)

*****
*****

数据库(二):初识sql语句的更多相关文章

  1. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  2. 3 MySQL数据库--初识sql语句

    1.初识sql语句 服务端软件 mysqld SQL语句:后面的分号mysql -uroot -p123 操作文件夹(库) 增 create database db1 charset utf8; 查 ...

  3. 数据库---初识sql语句

    初识sql语句 SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型: DDL语句     数据库定义语言: 数据库.表.视图.索引.存储 ...

  4. Mysql初识数据库《五》初识sql语句

    初识sql语句 有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写 mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要 ...

  5. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  6. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  7. oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)

    先列上我的数据库表格: c_date(Date格式)     date_type(String格式) 2011-01-01                   0 2012-03-07         ...

  8. 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷

    原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...

  9. 【转载】 Sqlserver查看数据库死锁的SQL语句

    在Sqlsever数据库中,有时候操作数据库过程中会进行锁表操作,在锁表操作的过程中,有时候会出现死锁的情况出现,这时候可以使用SQL语句来查询数据库死锁情况,主要通过系统数据库Master数据库来查 ...

随机推荐

  1. ArrayList类的使用

    ArrayList常用类方法 (1)添加元素 public boolean add(E element) 在集合末端添加一个元素 public void add(int index,E element ...

  2. Riccati方程迭代法求解

    根据上述迭代法求解P,P为Riccati方程的解,然而用LQR需要计算K,再将K算出. (迭代过程中 ,我们可以将此算法和dlqr函数求解的参数进行对比,当误差小于我们设置的允许误差我们就可以把此算法 ...

  3. [CF1216E] Numerical Sequence hard version

    题目 The only difference between the easy and the hard versions is the maximum value of k. You are giv ...

  4. 【树形dp】 bzoj1131 Sta

    题目 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点 ...

  5. Spring Security(二) —— Guides

    摘要: 原创出处 https://www.cnkirito.moe/spring-security-2/ 「老徐」欢迎转载,保留摘要,谢谢! 2 Spring Security Guides 上一篇文 ...

  6. Layer 3.0

    https://jeesite.gitee.io/front/layer/3.0/layer.layui.com/index.html

  7. Jmeter系列(38)- 详解性能监控工具 nmon

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 做性能测试,服务器监控是至关重要 ...

  8. 从此不怕Synchronized锁

    Synchronized的使用 ​ Synchronized是通过监视器保证线程同步从而保证线程安全.但是Synchronized锁可以锁对象和锁类,并会产生不同的效果,通过下面的案例彻底理解Sync ...

  9. C#读取Excel转换为DataBle

    /// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...

  10. jvm之栈、堆

    1. Java Virtual Machine ​ 人群当中,一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌.就在此时,c老头和c++老头缓步走来,看着被众人围住的java,c老头感 ...