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;

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

  1. SQL 基础笔记(二):进阶查询

    本笔记整理自<SQL 基础教程>.<MySQL 必知必会>和网上资料.个人笔记不保证正确. 一.复杂查询 视图 将 SELECT 查询包装成一个虚拟表,该虚拟表就被称为视图.( ...

  2. SQL 基础笔记(一)

    本笔记整理自<SQL 基础教程>.<MySQL 必知必会>和网上资料.个人笔记不保证正确. 一.基础 SQL,即结构化查询语言,是为访问与操作关系数据库中的数据而设计的语言. ...

  3. canvas笔记备忘

    备忘 1. canvas标签的宽和高设置是标签属性设置, 不是 css 属性设置. 如果用 css 属性设置大小, canvas 会被拉伸. 标签属性例如: class, id, style, wid ...

  4. python基础学习笔记 - 备忘

    基础中的基础 Python标识符 命名规则: Python标识符区分大小写. 可以包括英文.数字以及下划线,但不能以数字开头. 以下划线开头的标识符是有特殊意义的: a)         以单下划线开 ...

  5. SQL基础笔记

    Codecademy中Learn SQL, SQL: Table Transformaton和SQL: Analyzing Business Metrics三门课程的笔记,以及补充的附加笔记. Cod ...

  6. SQL 基础笔记(三):约束

    个人笔记不保证正确. 数据类型是限制我们可以在表里存储什么数据的一种方法.不过,对于许多应用来说, 这种限制实在是太粗糙了.比如,一个包含产品价格的字段应该只接受正数. 但是没有哪种标准数据类型只接受 ...

  7. SQL基本语法备忘

    注:以下演示是在mysql命令行下的操作 数据库相关操作 create database mytest; --创建数据库 create database if not exists mytest; - ...

  8. DB2学习笔记备忘 2018.5.9

    DB2安装的时候选择了和系统用户一致的选项,然后登陆的时候,连接的时候输入的就是计算机用户的用户名和密码. 1.3 DB2数据库体系结构 系统 一个系统表示DB2的一个安装.在一个由很多及其组成的网络 ...

  9. ASP.NET基础代码备忘

    使用ASP.NET原生的__doPostBack方法触发asp:Button //javaScript部分 __doPostBack('<%=btnAmountDivided.UniqueID ...

随机推荐

  1. 51Nod1376 (dp + BIT // cdq分治)

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 求LIS的数量. 乍一看觉得还是dp,仔细一看确实可以用dp做. ...

  2. StringUtils中isEmpty 和isBlank的区别

    StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lan ...

  3. Date对象常用方法

    年月日: var oDate = new Date() //年 oDate.getFullYear(); //月 返回的月份要+1才正常 oDate.getMonth()+1: //日 oDate.g ...

  4. JQ版本对比

    JQ不知不觉来到第三版了,那么它们有什么不同呢? 下面先给大家推一个CDN加速的网站,上面有各种JQ的版本:http://www.bootcdn.cn/jquery/ 先来对比一下它们的“体重”,23 ...

  5. exportfs命令

    exportfs命令:功能说明 :NFS共享管理 语法格式 exportfs [必要参数][选择参数][目录] 功能描述 exportfs 命令:用于管理NFS(Network File System ...

  6. JVM总结(二):JVM的内存分配策略

    这节我们总结一下JVM中的内存分配策略.目录如下: 内存分配策略 对象优先在新生代Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保 内存分配策略 Java ...

  7. centos7环境下在线安装mysql

    卸载mariadb centos默认安装了mariadb,因此,在安装mysql之前,需要卸载系统中安装的mariadb. 查看系统中所有已安装的mariadb包.命令:rpm -qa | grep ...

  8. 在tomcat集群下利用redis实现单点登陆

    场景:比如说我们要实现一个集群环境,无非是把多个项目部署到多个tomcat下,然后按照一定的算法,轮询什么的随机访问多个tomcat服务器,但是问题也会有许多,比如说,我们最开始是把登陆人的信息存放到 ...

  9. 使用Jupyter lab前应该读的几篇文章

    知乎上的一篇文章: 如何优雅的使用Jupyter? Jupyter Lab原来还有如下使用方式: 执行Shell命令 Hintland(提示命令).snippets(插入代码段).一键美化代码等功能( ...

  10. slf4j的简单用法以及与log4j的区别

    之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...