sql基础笔记备忘

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型:
tinyint smallint mediumint int bigint float double

decimal(size,d) numeric(size,d) 等价
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

日期和时间类型:

date YYYY-MM-DD
time HH:MM:SS
year YYYY
datetime YYYY-MM-DD HH:MM:SS
timestamp YYYYMMDD HHMMSS TIMESTAMP类型有专有的自动更新特性

字符串类型:
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

------------------------------------------------------------------------------------

创建MySQL数据表需要以下信息:

表名
表字段名
定义每个表字段

国家标准GB2312: 一个汉字=2个字节
UTF-8:一个汉字=3个字节(一般)
首先要确定mysql版本
4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节)
5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以

存放50个

create table nangua(nangua_id INT NOT NULL AUTO_INCREMENT,
nangua_title VARCHAR(200),
nangua_author VARCHAR(30),
nangua_date DATE,
PRIMARY KEY(NANGUA_ID));

不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

PHP方式创建:

header("content-type:text/html;charset=utf-8");
$con=mysql_connect(‘localhost‘,‘root‘,123);
if(!$con){
die(‘不能连接到数据库‘.mysql_error());
}
echo ‘成功连接数据‘.‘<br/>‘;
$sql="create table qiezi(".
"nangua_id INT NOT NULL AUTO_INCREMENT,".
"nangua_title VARCHAR(200),".
"nangua_author VARCHAR(30),".
"nangua_date DATE,".
"PRIMARY KEY(nangua_id)".
")";
mysql_select_db(‘managerie‘);
$newtable=mysql_query($sql,$con);
if(!$newtable){
die(‘不能创建表‘.mysql_error());
}
echo ‘成功创建表!‘.‘<br/>‘;
mysql_close($con);

------------------------------------------------------------------------------------
删除表:
header("content-type:text/html;charset=utf-8");
$con=mysql_connect(‘localhost‘,‘root‘,123);
if(!$con){
die(‘不能连接到数据库‘.mysql_error());
}
echo ‘成功连接数据‘.‘<br/>‘;
mysql_select_db(‘managerie‘);
$sql=‘DROP TABLE qiezi‘;
$drop=mysql_query($sql,$con);
if(!$drop){
die(‘未删除成功‘.mysql_error());
}
echo ‘删除成功!‘;
mysql_close($con);

------------------------------------------------------------------------------------

插入数据:
<?php

header(‘content-type:text/html;charset=utf-8‘);
if(isset($_POST[‘sub‘])){

$con=mysql_connect(‘localhost‘,‘root‘,‘123‘);
if(!$con){

die(‘连接不成功!‘.mysql_error());
}

echo ‘链接成功!‘;

if(! get_magic_quotes_gpc()){

$nangua_title=addslashes($_POST[‘nangua_title‘]);
$nangua_author=addslashes($_POST[‘nangua_author‘]);
$nangua_date=addslashes($_POST[‘nangua_date‘]);

}else{

$nangua_title=$_POST[‘nangua_title‘];
$nangua_author=$_POST[‘nangua_author‘];
$nangua_date=$_POST[‘nangua_date‘];

}

$sql="create table kk4(".
"nangua_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,".
"nangua_title VARCHAR(200),".
"nangua_author VARCHAR(100),".
"nangua_date DATE,".
"PRIMARY KEY(nangua_id)".
")";

mysql_select_db(‘managerie‘);

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE ‘kk4‘"))==0){

$newtable=mysql_query($sql,$con);

if(!$newtable){

die(‘创建表不成功‘.mysql_error().‘<br/>‘);

}

echo ‘创建表成功‘.‘<br/>‘;

}

$insert_sql="INSERT INTO kk4(".
"nangua_title,nangua_author,nangua_date)".
"VALUES".
"(‘$nangua_title‘,‘$nangua_author‘,‘$nangua_date‘)";

$write=mysql_query($insert_sql,$con);
if(!$write){
die(‘写入数据不成功‘.mysql_error().‘<br/>‘);
}
echo ‘写入数据成功!‘;
mysql_close($con);

}
else{
?>

<form method="post" action="<?php $_PHP_SELF ?>">
<table width="600" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="250">Tutorial Title</td>
<td>
<input name="nangua_title" type="text" id="nangua_title">
</td>
</tr>
<tr>
<td width="250">Tutorial Author</td>
<td>
<input name="nangua_author" type="text" id="nangua_author">
</td>
</tr>
<tr>
<td width="250">Submission Date [ yyyy-mm-dd ]</td>
<td>
<input name="nangua_date" type="text" id="nangua_date">
</td>
</tr>
<tr>
<td width="250"> </td>
<td> </td>
</tr>
<tr>
<td width="250"> </td>
<td>
<input name="sub" type="submit" id="sub" value="">
</td>
</tr>
</table>
</form>
<?php
}
?>

------------------------------------------------------------------------------------
SELECT 查询数据:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]

查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
可以使用 WHERE 语句来包含任何条件。
可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
可以使用 LIMIT 属性来设定返回的记录数。

header(‘content-type:text/html;charset=utf-8‘);

$con=mysql_connect(‘localhost‘,‘root‘,‘123‘);
if(!$con){

die(‘连接不成功!‘.mysql_error());
}

echo ‘链接成功!‘;

$sql="SELECT nangua_title,nangua_author,nangua_date FROM kk4";

mysql_select_db(‘managerie‘);

$return_result=mysql_query($sql,$con);

if(!$return_result){

die(‘查询不到数据‘.mysql_error());

}

while($row=mysql_fetch_array($return_result,MYSQL_ASSOC)){

echo "标题是:{$row[‘nangua_title‘]}<br/>".
"作者是:".$row[‘nangua_author‘].‘<br/>‘.
"发表时间是:{$row[‘nangua_date‘]}<br/>";

}
mysql_free_result($con);
echo ‘遍历完成!‘;
mysql_close($con);

在我们执行完SELECT语句后,释放游标内存是一个很好的习惯。 。可以通过PHP函数mysql_free_result()来实现

内存的释放。

------------------------------------------------------------------------------------
UPDATE 更新修改数据:

需要修改或更新MySQL中的数据,我们可以使用 SQL UPDATE 命令来操作
$sql="UPDATE kk4 SET nangua_title=11111111111 WHERE nangua_id =122";

mysql_select_db(‘managerie‘);

$return_result=mysql_query($sql,$con);

------------------------------------------------------------------------------------

DELETE删除:

$sql="DELETE FROM kk4 WHERE nangua_title=11111111111";

------------------------------------------------------------------------------------

LIKE子句:
LIKE 子句中使用百分号(%)字符来表示任意字符,类似于UNIX或正则表达式中的星号 (*)
如果没有使用百分号(%), LIKE 子句与等号(=)的效果是一样的。
$sql=‘SELECT nangua_id FROM kk4 WHERE nangua_author LIKE "4%" ‘;

mysql_select_db(‘managerie‘);

$return_result=mysql_query($sql,$con);

while($xx=mysql_fetch_assoc($return_result)){

echo "{$xx[‘nangua_id‘]}";

}
------------------------------------------------------------------------------------

ORDER BY 排序子句
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]

$sql=‘SELECT nangua_date FROM kk4 ORDER BY nangua_id DESC‘;

mysql_select_db(‘managerie‘);

$return_result=mysql_query($sql,$con);

while($xx=mysql_fetch_array($return_result,MYSQL_ASSOC)){

echo "{$xx[‘nangua_date‘]}<br/>";

}

------------------------------------------------------------------------------------

select VERSION(); 查看mysql版本信息

如需从列中仅选取唯一不同的值,需要使用 SELECT DISTINCT 语句:

select current_date(); 查看当前日期 select curdate();

select 5*2; 计算

select now(); 查看当前时间

\c 取消

quit 退出 \q 退出

select user(); 查看当前用户

LOAD DATA LOCAL INFILE ‘/path/pet.txt‘ INTO TABLE pet; 载入文本文件到数据库
LINES TERMINATED BY ‘\r\n‘;

YEAR() 截取年份

right(curdate(),5)回最右边的len个字符的字符串

drop 删除表 删除数据库 drop table if exists kk4; drop database kk4;

alter 修改表结构 删除 增加列

alter table test rename test1; //修改表名

ALTER TABLE table_name ADD column_name datatype //增加列

ALTER TABLE table_name DROP COLUMN column_name //删除列

ALTER TABLE `TableName` MODIFY COLUMN `FieldName` VARCHAR(14) //修改列属性

alter table pp modify id int default 1; 修改列属性
alter table pp change id newid int; 修改列名

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值不要使用引号。

TOP 子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

select * from name limit 4;
select * from name order by id desc limit 2;
要先order by再limit

"%" 可用于定义通配符(模式中缺少的字母)一个或者多个
select * from name where firstname like ‘%7‘;

不包含:not like

select * from name where firstname not like ‘%7%‘;

% 替代一个或多个字符
_ 仅替代一个字符

IN 操作符允许我们在 WHERE 子句中规定多个值。
select * from name where firstname in (‘bb8‘,‘bb6‘);

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
注意 不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。
select * from name where newid between 2 and 7; mysql是包含2和7的

别名 alias AS或者省略 一般多表查询的时候加个别名比较方便一点
select * from name as n where n.firstname=‘bb3‘;
select * from name n where n.firstname=‘bb3‘;
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName=‘Adams‘ AND p.FirstName=‘John‘

JOIN==inner join: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行 mysql不支持

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中

的列的顺序必须相同。

select into mysql不支持

约束用于限制加入表的数据的类型
NOT NULL
UNIQUE 约束 唯一的 unique和primary key 区别是一个表中主键只能有一个
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE, 设置约束
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

删除约束
alter table nangua drop index name ;

当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束:
alter table nangua add unique(Id_P)

命名unique 约束
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

foreign key 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City=‘Sandnes‘)
)

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City=‘Sandnes‘)

ALTER TABLE Persons
DROP CHECK chk_Person

alter table users AUTO_INCREMENT=10000; 修改起始值

default 设置默认值
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Sandnes‘
)

ALTER TABLE Persons
ALTER City SET DEFAULT ‘SANDNES‘

CREATE INDEX 语句用于在表中创建索引。
更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的

做法是仅仅在常常被搜索的列(以及表)上面创建索引。

CREATE INDEX PersonIndex
ON Person (LastName)

CREATE INDEX PersonIndex
ON Person (LastName DESC)

通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
ALTER TABLE table_name DROP INDEX index_name

SQL Date 函数:

NOW() 函数返回当前的日期和时间。
alter table wokao add orderdate datetime not null default now();
insert into wokao (name,age2)values(‘z‘,20);

CURDATE() 函数返回当前的日期。
select curdate();

CURTIME() 函数返回当前的时间。

DATE() 函数返回日期或日期/时间表达式的日期部分。
date(curtime()) 提取日期部分

EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
EXTRACT(unit FROM date) date 参数是合法的日期表达式。
SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay
FROM Orders
WHERE OrderId=1

select extract(year from orderdate) from wokao;

DATE_ADD() 函数向日期添加指定的时间间隔。
select date_add(orderdate,interval 2 week) from wokao where id=102;

DATE_SUB() 从日期减去指定的时间间隔
select date_sub(orderdate,interval 2 week) from wokao where id=102;

DATEDIFF() 返回两个日期之间的天数
DATEDIFF(date1,date2)

SQL函数:
select avg(nihao) from wokao; 求平均数

count COUNT() 函数返回匹配指定条件的行数。
select count(nihao) from wokao where nihao=12;
select count(distinct nihao) from wokao; 去掉重复的

FIRST() 函数
FIRST() 函数返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
//mysql 没有first函数

MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
select max(nihao) from wokao;

SUM() 函数
SUM 函数返回数值列的总数(总额)。

GROUP BY 语句 分类汇总。
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
select name,sum(nihao) from wokao group by nihao;
select name,sum(nihao) from wokao group by nihao order by nihao desc

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和

having字句前。而 having子句在聚合后对组记录进行筛选。

select name,sum(nihao) from wokao group by name having sum(nihao)<20;
select name,sum(nihao) from wokao where name=‘nn‘ group by name having sum(nihao)<20;

UCASE() 函数
UCASE 函数把字段的值转换为大写。
SELECT UCASE(column_name) FROM table_name

LCASE() 函数
LCASE 函数把字段的值转换为小写。

MID() 函数
MID 函数用于从文本字段中提取字符。
SELECT MID(column_name,start[,length]) FROM table_name
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
select mid(nihao,1,1) from wokao;

ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name

select round(ff,2) from wokao;

时间: 2024-10-11 23:33:05

sql基础笔记备忘的相关文章

工作中常用SQL 查询语句备忘

--当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列.select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name --求和查询 create table #tmp(rq varchar(10), shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tm

pl/sql 基础笔记(上)

由于公司中使用 oracle,而本人对存储过程一直也懵懵懂懂,故一周时间学习了一遍 pl/sql,在此记下笔记!!! 一.前提,pl/sql 是啥? 1.PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问. 2.由于该语言集成于数据库服务器中, 所以PL/SQL代码可以对数据进行快速高效的处理. 3.PL/SQL 是 ORACLE 系统的核心语言,现在 ORACLE 的许多部件都是由 PL/SQL 写成. 4.在 PL/SQL 中只能用 SQL 语句

SQL基础笔记

Codecademy中Learn SQL, SQL: Table Transformaton和SQL: Analyzing Business Metrics三门课程的笔记,以及补充的附加笔记. Codecademy的课程以SQLite编写,笔记中改成了MySQL语句. I. Learn SQL 1. Manipulation - Create, edit, delete data 1.4 Create 创建数据库或数据库中的表 CREATE TABLE celebs ( id INTEGER,

mysql笔记&lt;备忘&gt;

mysql常用工具: 1.mysql -e  执行语句 -E  相当于\G; -s  去掉条框 2.mysqldump mysqldump -uroot -p --compact -c database_name [table_name] -T > ./ -T表示在备份时,会生成两个文件(.sql和.txt),将执行语句存到.sql文件中,将真是内容存入到.txt文件中. -F  flush log -l  Lock all tables for read. -r  保存到指定文件中 --com

如何成为以为Openstack贡献者学习笔记(备忘,待整理)

是一篇相对杂乱的笔记,有待整理 如何成为以为Openstack贡献者 Openstack只是一个技术框架 Openstack基金会 技术委员会 代码管理.质量把握 懂事委员会 决定了Openstack未来发展的方向 铂金会员.黄金会员.个人会员 用户委员会 收集不同的用户对Openstack的需求 开发流程.版本发布管理 开发者.用户.社区生态体系管理 收集用户需求 商标管理 社区事务管理(summit meetup ) 法律问题 Openstack贡献者需知 注册 https://launch

Java基础知识点备忘

static 1.静态域 用static修饰的域是仅属于类的静态域,静态域是类中每个对象共享的域:他们是类的域,不属于任何一个类的具体对象:静态域是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,因此static代码块可以优化程序性能. 2.静态方法 用static修饰的方法叫类方法也叫静态方法:静态方法和静态变量一样,不许创建类的实例,可以直接通过类名被访问:无法使用protected和abstract关键字:在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态

Linux:基础配置--备忘

1.网络 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=08:00:27:77:F3:A1 TYPE=Ethernet UUID=4d488b01-d7ac-411c-8fb7-50500572889c ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.134.25 GATEWAY=192.168.134.1 NETMASSK=255.255.255

python 学习笔记备忘

http://www.cnblogs.com/vamei/archive/2012/05/28/2522677.html 1. print 可以打印 有时需要 (),有的版本不需要. 惯例hello world:   print("hello world") 2. 脚本保存为 .py 1) 可以在linux环境下输入: $python sample.py 2)在IDE环境下 在脚本编写界面,点击run module执行脚本 3. 变量不需要声明: 区分大小写吗? 4. 内置函数 typ

SoapUI使用笔记备忘

1.安装好SoapUI后,新建一个REST项目 注意新建REST项目时,需要输入测试站点的地址,即IP+端口 之后点击OK就建立好了项目,但是新项目会默认自带一个根路径访问请求,可以删除(一般没用) 可以给工程改为自己想要的名字 然后可以设置好所有请求的基地址,这样可以避免每个Resource请求都单独设置 设置好后如下,我们的请求基地址为“http://192.168.1.105:8080/AppPlatform/” 到这里项目就建立完毕了. 2.REST项目建立好了可以为每个请求建立Reso