基本数据库操作sql语句

数据库服务器可以容纳很多个数据库,数据库是许多表的组合,逻辑关系如下:
数据库服务器->数据库->表(由列定义)->行
表是由行和列组成。
数据库和表称为数据库对象。任何操作(如创建、修改或删除数据库对象)都称为数据定义
语言(DDL)操作。
数据按某种蓝图组织构建数据库(分为数据库和表),这种数据的组织形式被称为
schema。
1、创建数据库:
mysql> create database company;
mysql> create database my.contacts;
反引号(`)用于引用标识符,如果数据库名称或者表名称中包含特殊字符,需要使用。
查看你有权访问的都有哪些数据库:
mysql> show databases;
2、切换数据库:
mysql> use company;
Database changed
查看当前使用了哪个数据库:
mysql> select database();
±-----------+
| database() |
±-----------+
| company |
±-----------+
1 row in set (0.00 sec)
数据库被创建为数据目录中的一个目录,如果是yum安装的默认目录是/var/lib/mysql,如
果是二进制安装的,数据目录是/usr/local/mysql/data/。可以通过以下命令来查看数据目
录位置。
mysql> show variables like ‘datadir’;
±--------------±-----------------------+
| Variable_name | Value |
±--------------±-----------------------+
| datadir | /usr/local/mysql/data/ |
±--------------±-----------------------+
1 row in set (0.01 sec)
3、创建表
更难的部分是决定数据库的结构应该是什么:您需要哪些表以及每个表中应该包含哪些列。
在表中定义列时,应该指定列的名称、数据类型和默认值(如果有的话)。
MySQL支持多种类型的SQL 数据类型:数字类型,日期和时间类型,字符串(字符和字
节)类型,spatial 类型和 JSON 数据类型
例如:
mysql> create table if not exists company.customers (
-> id int unsigned auto_increment primary key,
-> first_name varchar(20),
-> last_name varchar(20),
-> country varchar(20)
-> ) engine=InnoDB;
IF NOT EXISTS:如果存在一个具有相同名字的表,并且你指定了这个字句,MySQL只会抛
出一个警告,告知表已经存在。否则,MySQL将抛出一个错误。
company.customers :前面是数据库名字,后面是表名
id:这个是列名
int:代表是整数型
AUTO_INCREMENT:自动增长序列值
PRIMARY KEY: 指定主键
ENGINE:指定存储引擎,默认就是InnoDB
再来一个例子:

mysql>   CREATE   TABLE  pet  ( name   VARCHAR ( 20 ),   owner   VARCHAR ( 20 ),
       species  VARCHAR ( 20 ),  sex  CHAR ( 1 ),  birth  DATE ,  death  DATE );

sex:‘male’和 ‘female’。最简单的是使用单个字符’m’和’f’
再来一个例子:
mysql> create table company.payments (
-> customer_name varchar(20) primary key,
-> payment float
-> );
4、查看创建的表:
mysql> show tables ;
5、查看表中的列结构:
mysql> describe pet;
mysql会在数据目录内创建.ibd文件
[root@db-server company]# ls -lhtr /usr/local/mysql/data/company/
total 240K
-rw-r-----. 1 mysql mysql 112K Apr 5 18:17 customers.ibd
-rw-r-----. 1 mysql mysql 112K Apr 5 18:30 pet.ibd
-rw-r-----. 1 mysql mysql 112K Apr 5 22:00 payments.ibd
6、克隆表结构
mysql> create table new_customers like customers;
Query OK, 0 rows affected (0.03 sec)
insert、update、delete和select操作称为数据操作语言(DML)语句。insert、
update和delete也称为写操作,或者简称为写(write)。select是一个读操作,简称为读
(read)。
7、插入数据(insert)
mysql> insert ignore into company.customers (first_name,
-> last_name,country)
-> values
-> (‘mike’,‘christensen’,‘USA’),
-> (‘andy’,‘Hollands’,‘Australia’),
-> (‘ravi’,‘vedantam’,‘India’),
-> (‘rajiv’,‘perera’,‘Sri lanka’);
或者明确写出id列,如果你想插入特定的id
mysql> insert ignore into company.customers (id,first_name,
-> last_name,country)
-> values
-> (1,‘mike’,‘christensen’,‘USA’),
-> (2,‘andy’,‘Hollands’,‘Australia’),
-> (3,‘ravi’,‘vedantam’,‘India’),
-> (4,‘rajiv’,‘perera’,‘Sri lanka’);
ignore:如果该行已经存在,并给出了ignore字句,则新数据将被忽略,insert语句仍然会
执行成功,同时生成一个警告和重复数据的数目。反之,如果未给出ignore字句,则insert
语句会生成一条错误信息。行的唯一性由主键标识。
8、更新语句(update)
update用于修改表中现有数据
mysql> update customers set first_name=‘rajiv’,country=‘UK’ where id=4;
where:这是用于过滤的字句。在where字句后指定的任何条件都会用于过滤,被筛选出来
的行都会被更新。where字句是强制性的。如果没有给出它,update会更新整个表。
9、删除语句(delete)
mysql> delete from customers where id=4 and first_name=‘rajiv’;
Query OK, 1 row affected (0.01 sec)
where字句是强制性的。如果没有给出它,delete将删除表中的所有行。
10、replace、insert、on duplicate key update
在很多情况下,我们需要处理重复项。行的唯一性由主键标识。如果行已经存在,则
replace会简单的删除行并插入新行;如果行不存在,则replace等同于insert。
如果你想在行已经存在的情况下处理重复项,则需要使用on duplicate key update。如果
指定了on duplicate key update选项,并且insert语句在primary key中引发了重复值,则
MySQL会用新值更新已有行。
假设你希望每次从同一客户那里收到付款后更新之前的金额,并且在客户首次付款时插入新
记录,那么你需要定义一个金额栏,并在每次收到新付款时进行更新:
mysql> replace into customers values (1,‘Mike’,‘Christensen’,‘America’);
Query OK, 2 rows affected (0.00 sec)
可以看到有两行受到影响,一个重复行被删除,一个新行被插入;
mysql> insert into payments values (‘Mike Christensen’,200) on duplicate key
-> update payment=payment+values(payment);
Query OK, 1 row affected (0.00 sec)
mysql> insert into payments values (‘Ravi Vedantam’,500) on duplicate key
-> update payment=payment+values(payment);
Query OK, 1 row affected (0.00 sec)
当Mike Christensen 下次支付300美元时,将更新该行并将此付款金额添加到以前的金额
中:
mysql> insert into payments values (‘Mike Christensen’,300) on duplicate key
-> update payment=payment+values(payment);
Query OK, 2 rows affected (0.00 sec)
values(payment):指的insert语句中给出的值,payment指的是表中的列。
11、truncating table
删除整个表需要很长时间,因为mysql需要逐行执行操作。删除表的所有行(保留表结构)
的最快方法是使用truncate table语句。truncating table 是mysql中的DDL操作,也就是
说一旦数据被清空,就不能被回滚:
mysql> truncate table info_tables;
Query OK, 0 rows affected (0.03 sec)

猜你喜欢

转载自blog.csdn.net/wangboyujiayou/article/details/107436765